refactor(backend): naming-convention

This commit is contained in:
Tibo De Peuter 2025-03-22 17:38:10 +01:00
parent 14e1508d00
commit 7a286f5650
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
23 changed files with 78 additions and 62 deletions

View file

@ -5,7 +5,7 @@ import cors from './middleware/cors.js';
import { getLogger, Logger } from './logging/initalize.js'; import { getLogger, Logger } from './logging/initalize.js';
import { responseTimeLogger } from './logging/responseTimeLogger.js'; import { responseTimeLogger } from './logging/responseTimeLogger.js';
import responseTime from 'response-time'; import responseTime from 'response-time';
import { EnvVars, getNumericEnvVar } from './util/envvars.js'; import { envVars, getNumericEnvVar } from './util/envVars.js';
import apiRouter from './routes/router.js'; import apiRouter from './routes/router.js';
import swaggerMiddleware from './swagger.js'; import swaggerMiddleware from './swagger.js';
import swaggerUi from 'swagger-ui-express'; import swaggerUi from 'swagger-ui-express';
@ -13,7 +13,7 @@ import swaggerUi from 'swagger-ui-express';
const logger: Logger = getLogger(); const logger: Logger = getLogger();
const app: Express = express(); const app: Express = express();
const port: string | number = getNumericEnvVar(EnvVars.Port); const port: string | number = getNumericEnvVar(envVars.Port);
app.use(express.json()); app.use(express.json());
app.use(cors); app.use(cors);

View file

@ -1,8 +1,8 @@
import { EnvVars, getEnvVar } from './util/envvars.js'; import { envVars, getEnvVar } from './util/envVars.js';
// API // API
export const DWENGO_API_BASE = getEnvVar(EnvVars.LearningContentRepoApiBaseUrl); export const DWENGO_API_BASE = getEnvVar(envVars.LearningContentRepoApiBaseUrl);
export const FALLBACK_LANG = getEnvVar(EnvVars.FallbackLanguage); export const FALLBACK_LANG = getEnvVar(envVars.FallbackLanguage);
// Logging // Logging
export const LOG_LEVEL: string = 'development' === process.env.NODE_ENV ? 'debug' : 'info'; export const LOG_LEVEL: string = 'development' === process.env.NODE_ENV ? 'debug' : 'info';

View file

@ -1,4 +1,4 @@
import { EnvVars, getEnvVar } from '../util/envvars.js'; import { envVars, getEnvVar } from '../util/envVars.js';
type FrontendIdpConfig = { type FrontendIdpConfig = {
authority: string; authority: string;
@ -18,14 +18,14 @@ const RESPONSE_TYPE = 'code';
export function getFrontendAuthConfig(): FrontendAuthConfig { export function getFrontendAuthConfig(): FrontendAuthConfig {
return { return {
student: { student: {
authority: getEnvVar(EnvVars.IdpStudentUrl), authority: getEnvVar(envVars.IdpStudentUrl),
clientId: getEnvVar(EnvVars.IdpStudentClientId), clientId: getEnvVar(envVars.IdpStudentClientId),
scope: SCOPE, scope: SCOPE,
responseType: RESPONSE_TYPE, responseType: RESPONSE_TYPE,
}, },
teacher: { teacher: {
authority: getEnvVar(EnvVars.IdpTeacherUrl), authority: getEnvVar(envVars.IdpTeacherUrl),
clientId: getEnvVar(EnvVars.IdpTeacherClientId), clientId: getEnvVar(envVars.IdpTeacherClientId),
scope: SCOPE, scope: SCOPE,
responseType: RESPONSE_TYPE, responseType: RESPONSE_TYPE,
}, },

View file

@ -2,7 +2,7 @@ import { Request, Response } from 'express';
import { FALLBACK_LANG } from '../config.js'; import { FALLBACK_LANG } from '../config.js';
import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../interfaces/learning-content.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../interfaces/learning-content.js';
import learningObjectService from '../services/learning-objects/learning-object-service.js'; import learningObjectService from '../services/learning-objects/learning-object-service.js';
import { EnvVars, getEnvVar } from '../util/envvars.js'; import { envVars, getEnvVar } from '../util/envVars.js';
import { Language } from '../entities/content/language.js'; import { Language } from '../entities/content/language.js';
import { BadRequestException } from '../exceptions.js'; import { BadRequestException } from '../exceptions.js';
import attachmentService from '../services/learning-objects/attachment-service.js'; import attachmentService from '../services/learning-objects/attachment-service.js';
@ -14,7 +14,7 @@ function getLearningObjectIdentifierFromRequest(req: Request): LearningObjectIde
} }
return { return {
hruid: req.params.hruid as string, hruid: req.params.hruid as string,
language: (req.query.language || getEnvVar(EnvVars.FallbackLanguage)) as Language, language: (req.query.language || getEnvVar(envVars.FallbackLanguage)) as Language,
version: parseInt(req.query.version as string), version: parseInt(req.query.version as string),
}; };
} }

View file

@ -47,7 +47,7 @@ export async function getUserHandler<T extends User>(req: Request, res: Response
} }
} }
export async function createUserHandler<T extends User>(req: Request, res: Response, service: UserService<T>, UserClass: new () => T) { export async function createUserHandler<T extends User>(req: Request, res: Response, service: UserService<T>, userClass: new () => T) {
try { try {
getLogger().debug({ req: req }); getLogger().debug({ req: req });
const userData = req.body as UserDTO; const userData = req.body as UserDTO;
@ -59,7 +59,7 @@ export async function createUserHandler<T extends User>(req: Request, res: Respo
return; return;
} }
const newUser = await service.createUser(userData, UserClass); const newUser = await service.createUser(userData, userClass);
res.status(201).json(newUser); res.status(201).json(newUser);
} catch (error) { } catch (error) {
getLogger().error('❌ Error creating user:', error); getLogger().error('❌ Error creating user:', error);

View file

@ -22,8 +22,8 @@ export function mapToTeacherDTO(teacher: Teacher): TeacherDTO {
}; };
} }
export function mapToTeacher(TeacherData: TeacherDTO): Teacher { export function mapToTeacher(teacherDTO: TeacherDTO): Teacher {
const teacher = new Teacher(TeacherData.username, TeacherData.firstName, TeacherData.lastName); const teacher = new Teacher(teacherDTO.username, teacherDTO.firstName, teacherDTO.lastName);
return teacher; return teacher;
} }

View file

@ -9,7 +9,7 @@ export class Logger extends WinstonLogger {
} }
} }
const Labels: LokiLabels = { const lokiLabels: LokiLabels = {
source: 'Dwengo-Backend', source: 'Dwengo-Backend',
service: 'API', service: 'API',
host: 'localhost', host: 'localhost',
@ -24,7 +24,7 @@ function initializeLogger(): Logger {
const lokiTransport: LokiTransport = new LokiTransport({ const lokiTransport: LokiTransport = new LokiTransport({
host: LOKI_HOST, host: LOKI_HOST,
labels: Labels, labels: lokiLabels,
level: LOG_LEVEL, level: LOG_LEVEL,
json: true, json: true,
format: format.combine(format.timestamp(), format.json()), format: format.combine(format.timestamp(), format.json()),

View file

@ -1,4 +1,4 @@
import { EnvVars, getEnvVar } from '../../util/envvars.js'; import { envVars, getEnvVar } from '../../util/envVars.js';
import { expressjwt } from 'express-jwt'; import { expressjwt } from 'express-jwt';
import { JwtPayload } from 'jsonwebtoken'; import { JwtPayload } from 'jsonwebtoken';
import jwksClient from 'jwks-rsa'; import jwksClient from 'jwks-rsa';
@ -32,12 +32,12 @@ function createJwksClient(uri: string): jwksClient.JwksClient {
const idpConfigs = { const idpConfigs = {
student: { student: {
issuer: getEnvVar(EnvVars.IdpStudentUrl), issuer: getEnvVar(envVars.IdpStudentUrl),
jwksClient: createJwksClient(getEnvVar(EnvVars.IdpStudentJwksEndpoint)), jwksClient: createJwksClient(getEnvVar(envVars.IdpStudentJwksEndpoint)),
}, },
teacher: { teacher: {
issuer: getEnvVar(EnvVars.IdpTeacherUrl), issuer: getEnvVar(envVars.IdpTeacherUrl),
jwksClient: createJwksClient(getEnvVar(EnvVars.IdpTeacherJwksEndpoint)), jwksClient: createJwksClient(getEnvVar(envVars.IdpTeacherJwksEndpoint)),
}, },
}; };
@ -63,7 +63,7 @@ const verifyJwtToken = expressjwt({
} }
return signingKey.getPublicKey(); return signingKey.getPublicKey();
}, },
audience: getEnvVar(EnvVars.IdpAudience), audience: getEnvVar(envVars.IdpAudience),
algorithms: [JWT_ALGORITHM], algorithms: [JWT_ALGORITHM],
credentialsRequired: false, credentialsRequired: false,
requestProperty: REQUEST_PROPERTY_FOR_JWT_PAYLOAD, requestProperty: REQUEST_PROPERTY_FOR_JWT_PAYLOAD,

View file

@ -1,7 +1,7 @@
import cors from 'cors'; import cors from 'cors';
import { EnvVars, getEnvVar } from '../util/envvars.js'; import { envVars, getEnvVar } from '../util/envVars.js';
export default cors({ export default cors({
origin: getEnvVar(EnvVars.CorsAllowedOrigins).split(','), origin: getEnvVar(envVars.CorsAllowedOrigins).split(','),
allowedHeaders: getEnvVar(EnvVars.CorsAllowedHeaders).split(','), allowedHeaders: getEnvVar(envVars.CorsAllowedHeaders).split(','),
}); });

View file

@ -1,6 +1,6 @@
import { LoggerOptions, Options } from '@mikro-orm/core'; import { LoggerOptions, Options } from '@mikro-orm/core';
import { PostgreSqlDriver } from '@mikro-orm/postgresql'; import { PostgreSqlDriver } from '@mikro-orm/postgresql';
import { EnvVars, getEnvVar, getNumericEnvVar } from './util/envvars.js'; import { envVars, getEnvVar, getNumericEnvVar } from './util/envVars.js';
import { SqliteDriver } from '@mikro-orm/sqlite'; import { SqliteDriver } from '@mikro-orm/sqlite';
import { MikroOrmLogger } from './logging/mikroOrmLogger.js'; import { MikroOrmLogger } from './logging/mikroOrmLogger.js';
import { LOG_LEVEL } from './config.js'; import { LOG_LEVEL } from './config.js';
@ -47,7 +47,7 @@ function config(testingMode: boolean = false): Options {
if (testingMode) { if (testingMode) {
return { return {
driver: SqliteDriver, driver: SqliteDriver,
dbName: getEnvVar(EnvVars.DbName), dbName: getEnvVar(envVars.DbName),
subscribers: [new SqliteAutoincrementSubscriber()], subscribers: [new SqliteAutoincrementSubscriber()],
entities: entities, entities: entities,
// EntitiesTs: entitiesTs, // EntitiesTs: entitiesTs,
@ -60,11 +60,11 @@ function config(testingMode: boolean = false): Options {
return { return {
driver: PostgreSqlDriver, driver: PostgreSqlDriver,
host: getEnvVar(EnvVars.DbHost), host: getEnvVar(envVars.DbHost),
port: getNumericEnvVar(EnvVars.DbPort), port: getNumericEnvVar(envVars.DbPort),
dbName: getEnvVar(EnvVars.DbName), dbName: getEnvVar(envVars.DbName),
user: getEnvVar(EnvVars.DbUsername), user: getEnvVar(envVars.DbUsername),
password: getEnvVar(EnvVars.DbPassword), password: getEnvVar(envVars.DbPassword),
entities: entities, entities: entities,
// EntitiesTs: entitiesTs, // EntitiesTs: entitiesTs,

View file

@ -1,6 +1,6 @@
import { EntityManager, MikroORM } from '@mikro-orm/core'; import { EntityManager, MikroORM } from '@mikro-orm/core';
import config from './mikro-orm.config.js'; import config from './mikro-orm.config.js';
import { EnvVars, getEnvVar } from './util/envvars.js'; import { envVars, getEnvVar } from './util/envVars.js';
import { getLogger, Logger } from './logging/initalize.js'; import { getLogger, Logger } from './logging/initalize.js';
let orm: MikroORM | undefined; let orm: MikroORM | undefined;
@ -12,7 +12,7 @@ export async function initORM(testingMode: boolean = false) {
orm = await MikroORM.init(config(testingMode)); orm = await MikroORM.init(config(testingMode));
// Update the database scheme if necessary and enabled. // Update the database scheme if necessary and enabled.
if (getEnvVar(EnvVars.DbUpdate)) { if (getEnvVar(envVars.DbUpdate)) {
await orm.schema.updateSchema(); await orm.schema.updateSchema();
} else { } else {
const diff = await orm.schema.getUpdateSchemaSQL(); const diff = await orm.schema.getUpdateSchemaSQL();

View file

@ -1,11 +1,11 @@
import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../../interfaces/learning-content.js'; import { FilteredLearningObject, LearningObjectIdentifier, LearningPathIdentifier } from '../../interfaces/learning-content.js';
import dwengoApiLearningObjectProvider from './dwengo-api-learning-object-provider.js'; import dwengoApiLearningObjectProvider from './dwengo-api-learning-object-provider.js';
import { LearningObjectProvider } from './learning-object-provider.js'; import { LearningObjectProvider } from './learning-object-provider.js';
import { EnvVars, getEnvVar } from '../../util/envvars.js'; import { envVars, getEnvVar } from '../../util/envVars.js';
import databaseLearningObjectProvider from './database-learning-object-provider.js'; import databaseLearningObjectProvider from './database-learning-object-provider.js';
function getProvider(id: LearningObjectIdentifier): LearningObjectProvider { function getProvider(id: LearningObjectIdentifier): LearningObjectProvider {
if (id.hruid.startsWith(getEnvVar(EnvVars.UserContentPrefix))) { if (id.hruid.startsWith(getEnvVar(envVars.UserContentPrefix))) {
return databaseLearningObjectProvider; return databaseLearningObjectProvider;
} }
return dwengoApiLearningObjectProvider; return dwengoApiLearningObjectProvider;

View file

@ -1,11 +1,11 @@
import { LearningPath, LearningPathResponse } from '../../interfaces/learning-content.js'; import { LearningPath, LearningPathResponse } from '../../interfaces/learning-content.js';
import dwengoApiLearningPathProvider from './dwengo-api-learning-path-provider.js'; import dwengoApiLearningPathProvider from './dwengo-api-learning-path-provider.js';
import databaseLearningPathProvider from './database-learning-path-provider.js'; import databaseLearningPathProvider from './database-learning-path-provider.js';
import { EnvVars, getEnvVar } from '../../util/envvars.js'; import { envVars, getEnvVar } from '../../util/envVars.js';
import { Language } from '../../entities/content/language.js'; import { Language } from '../../entities/content/language.js';
import { PersonalizationTarget } from './learning-path-personalization-util.js'; import { PersonalizationTarget } from './learning-path-personalization-util.js';
const userContentPrefix = getEnvVar(EnvVars.UserContentPrefix); const userContentPrefix = getEnvVar(envVars.UserContentPrefix);
const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider]; const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider];
/** /**

View file

@ -24,8 +24,8 @@ export class UserService<T extends User> {
return user ? mapToUserDTO(user) : null; return user ? mapToUserDTO(user) : null;
} }
async createUser(userData: UserDTO, UserClass: new () => T): Promise<T> { async createUser(userData: UserDTO, userClass: new () => T): Promise<T> {
const newUser = mapToUser(userData, new UserClass()); const newUser = mapToUser(userData, new userClass());
await this.repository.save(newUser); await this.repository.save(newUser);
return newUser; return newUser;
} }

View file

@ -7,7 +7,7 @@ const CORS_PREFIX = PREFIX + 'CORS_';
type EnvVar = { key: string; required?: boolean; defaultValue?: any }; type EnvVar = { key: string; required?: boolean; defaultValue?: any };
export const EnvVars: { [key: string]: EnvVar } = { export const envVars: { [key: string]: EnvVar } = {
Port: { key: PREFIX + 'PORT', defaultValue: 3000 }, Port: { key: PREFIX + 'PORT', defaultValue: 3000 },
DbHost: { key: DB_PREFIX + 'HOST', required: true }, DbHost: { key: DB_PREFIX + 'HOST', required: true },
DbPort: { key: DB_PREFIX + 'PORT', defaultValue: 5432 }, DbPort: { key: DB_PREFIX + 'PORT', defaultValue: 5432 },

View file

@ -6,7 +6,7 @@ import learningObjectExample from '../../test-assets/learning-objects/pn-werking
import learningObjectService from '../../../src/services/learning-objects/learning-object-service'; import learningObjectService from '../../../src/services/learning-objects/learning-object-service';
import { LearningObjectIdentifier, LearningPathIdentifier } from '../../../src/interfaces/learning-content'; import { LearningObjectIdentifier, LearningPathIdentifier } from '../../../src/interfaces/learning-content';
import { Language } from '../../../src/entities/content/language'; import { Language } from '../../../src/entities/content/language';
import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../src/util/envVars';
import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import { LearningPath } from '../../../src/entities/content/learning-path.entity';
import learningPathExample from '../../test-assets/learning-paths/pn-werking-example'; import learningPathExample from '../../test-assets/learning-paths/pn-werking-example';
@ -79,7 +79,7 @@ describe('LearningObjectService', () => {
expect(result).not.toBeNull(); expect(result).not.toBeNull();
const responseFromDwengoApi = await fetch( const responseFromDwengoApi = await fetch(
getEnvVar(EnvVars.LearningContentRepoApiBaseUrl) + getEnvVar(envVars.LearningContentRepoApiBaseUrl) +
`/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}` `/learningObject/getRaw?hruid=${DWENGO_TEST_LEARNING_OBJECT_ID.hruid}&language=${DWENGO_TEST_LEARNING_OBJECT_ID.language}&version=${DWENGO_TEST_LEARNING_OBJECT_ID.version}`
); );
const responseHtml = await responseFromDwengoApi.text(); const responseHtml = await responseFromDwengoApi.text();

View file

@ -3,7 +3,7 @@ import { LearningObject } from '../../../../src/entities/content/learning-object
import { Language } from '../../../../src/entities/content/language'; import { Language } from '../../../../src/entities/content/language';
import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { loadTestAsset } from '../../../test-utils/load-test-asset';
import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type';
import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../../src/util/envVars';
/** /**
* Create a dummy learning object to be used in tests where multiple learning objects are needed (for example for use * Create a dummy learning object to be used in tests where multiple learning objects are needed (for example for use
@ -13,7 +13,7 @@ export function dummyLearningObject(hruid: string, language: Language, title: st
return { return {
createLearningObject: () => { createLearningObject: () => {
const learningObject = new LearningObject(); const learningObject = new LearningObject();
learningObject.hruid = getEnvVar(EnvVars.UserContentPrefix) + hruid; learningObject.hruid = getEnvVar(envVars.UserContentPrefix) + hruid;
learningObject.language = language; learningObject.language = language;
learningObject.version = 1; learningObject.version = 1;
learningObject.title = title; learningObject.title = title;

View file

@ -4,14 +4,14 @@ import { DwengoContentType } from '../../../../src/services/learning-objects/pro
import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { loadTestAsset } from '../../../test-utils/load-test-asset';
import { EducationalGoal, LearningObject, ReturnValue } from '../../../../src/entities/content/learning-object.entity'; import { EducationalGoal, LearningObject, ReturnValue } from '../../../../src/entities/content/learning-object.entity';
import { Attachment } from '../../../../src/entities/content/attachment.entity'; import { Attachment } from '../../../../src/entities/content/attachment.entity';
import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../../src/util/envVars';
const ASSETS_PREFIX = 'learning-objects/pn-werkingnotebooks/'; const ASSETS_PREFIX = 'learning-objects/pn-werkingnotebooks/';
const example: LearningObjectExample = { const example: LearningObjectExample = {
createLearningObject: () => { createLearningObject: () => {
const learningObject = new LearningObject(); const learningObject = new LearningObject();
learningObject.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}pn_werkingnotebooks`; learningObject.hruid = `${getEnvVar(envVars.UserContentPrefix)}pn_werkingnotebooks`;
learningObject.version = 3; learningObject.version = 3;
learningObject.language = Language.Dutch; learningObject.language = Language.Dutch;
learningObject.title = 'Werken met notebooks'; learningObject.title = 'Werken met notebooks';

View file

@ -1,14 +1,14 @@
import { LearningObjectExample } from '../learning-object-example'; import { LearningObjectExample } from '../learning-object-example';
import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity';
import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { loadTestAsset } from '../../../test-utils/load-test-asset';
import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../../src/util/envVars';
import { Language } from '../../../../src/entities/content/language'; import { Language } from '../../../../src/entities/content/language';
import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type';
const example: LearningObjectExample = { const example: LearningObjectExample = {
createLearningObject: () => { createLearningObject: () => {
const learningObject = new LearningObject(); const learningObject = new LearningObject();
learningObject.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}test_essay`; learningObject.hruid = `${getEnvVar(envVars.UserContentPrefix)}test_essay`;
learningObject.language = Language.English; learningObject.language = Language.English;
learningObject.version = 1; learningObject.version = 1;
learningObject.title = 'Essay question for testing'; learningObject.title = 'Essay question for testing';

View file

@ -1,14 +1,14 @@
import { LearningObjectExample } from '../learning-object-example'; import { LearningObjectExample } from '../learning-object-example';
import { LearningObject } from '../../../../src/entities/content/learning-object.entity'; import { LearningObject } from '../../../../src/entities/content/learning-object.entity';
import { loadTestAsset } from '../../../test-utils/load-test-asset'; import { loadTestAsset } from '../../../test-utils/load-test-asset';
import { EnvVars, getEnvVar } from '../../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../../src/util/envVars';
import { Language } from '../../../../src/entities/content/language'; import { Language } from '../../../../src/entities/content/language';
import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type'; import { DwengoContentType } from '../../../../src/services/learning-objects/processing/content-type';
const example: LearningObjectExample = { const example: LearningObjectExample = {
createLearningObject: () => { createLearningObject: () => {
const learningObject = new LearningObject(); const learningObject = new LearningObject();
learningObject.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}test_multiple_choice`; learningObject.hruid = `${getEnvVar(envVars.UserContentPrefix)}test_multiple_choice`;
learningObject.language = Language.English; learningObject.language = Language.English;
learningObject.version = 1; learningObject.version = 1;
learningObject.title = 'Multiple choice question for testing'; learningObject.title = 'Multiple choice question for testing';

View file

@ -1,6 +1,6 @@
import { LearningPath } from '../../../src/entities/content/learning-path.entity'; import { LearningPath } from '../../../src/entities/content/learning-path.entity';
import { Language } from '../../../src/entities/content/language'; import { Language } from '../../../src/entities/content/language';
import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../src/util/envVars';
import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils';
import { LearningPathNode } from '../../../src/entities/content/learning-path-node.entity'; import { LearningPathNode } from '../../../src/entities/content/learning-path-node.entity';
@ -19,7 +19,7 @@ const example: LearningPathExample = {
createLearningPath: () => { createLearningPath: () => {
const path = new LearningPath(); const path = new LearningPath();
path.language = Language.Dutch; path.language = Language.Dutch;
path.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}pn_werking`; path.hruid = `${getEnvVar(envVars.UserContentPrefix)}pn_werking`;
path.title = 'Werken met notebooks'; path.title = 'Werken met notebooks';
path.description = 'Een korte inleiding tot Python notebooks. Hoe ga je gemakkelijk en efficiënt met de notebooks aan de slag?'; path.description = 'Een korte inleiding tot Python notebooks. Hoe ga je gemakkelijk en efficiënt met de notebooks aan de slag?';
path.nodes = createNodes(path); path.nodes = createNodes(path);

View file

@ -4,7 +4,7 @@ import testMultipleChoiceExample from '../learning-objects/test-multiple-choice/
import { dummyLearningObject } from '../learning-objects/dummy/dummy-learning-object-example'; import { dummyLearningObject } from '../learning-objects/dummy/dummy-learning-object-example';
import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils'; import { createLearningPathNode, createLearningPathTransition } from './learning-path-utils';
import { LearningObject } from '../../../src/entities/content/learning-object.entity'; import { LearningObject } from '../../../src/entities/content/learning-object.entity';
import { EnvVars, getEnvVar } from '../../../src/util/envvars'; import { envVars, getEnvVar } from '../../../src/util/envVars';
export type ConditionTestLearningPathAndLearningObjects = { export type ConditionTestLearningPathAndLearningObjects = {
branchingObject: LearningObject; branchingObject: LearningObject;
@ -15,7 +15,7 @@ export type ConditionTestLearningPathAndLearningObjects = {
export function createConditionTestLearningPathAndLearningObjects() { export function createConditionTestLearningPathAndLearningObjects() {
const learningPath = new LearningPath(); const learningPath = new LearningPath();
learningPath.hruid = `${getEnvVar(EnvVars.UserContentPrefix)}test_conditions`; learningPath.hruid = `${getEnvVar(envVars.UserContentPrefix)}test_conditions`;
learningPath.language = Language.English; learningPath.language = Language.English;
learningPath.title = 'Example learning path with conditional transitions'; learningPath.title = 'Example learning path with conditional transitions';
learningPath.description = 'This learning path was made for the purpose of testing conditional transitions'; learningPath.description = 'This learning path was made for the purpose of testing conditional transitions';
@ -78,7 +78,3 @@ export function createConditionTestLearningPathAndLearningObjects() {
learningPath: learningPath, learningPath: learningPath,
}; };
} }
const _example: LearningPathExample = {
createLearningPath: () => createConditionTestLearningPathAndLearningObjects().learningPath,
};

View file

@ -28,6 +28,27 @@ export default [
reportUnusedInlineConfigs: 'error', reportUnusedInlineConfigs: 'error',
}, },
rules: { rules: {
'@typescript-eslint/naming-convention': [
'warn',
{ // Enforce that all variables, functions and properties are camelCase
selector: 'variableLike',
format: ['camelCase'],
leadingUnderscore: 'allow'
},
{
selector: 'variable',
modifiers: ['const'],
format: ['camelCase', 'UPPER_CASE'],
trailingUnderscore: 'allow'
},
{ // Enforce that private members are prefixed with an underscore
selector: 'memberLike',
modifiers: ['private'],
format: ['camelCase'],
leadingUnderscore: 'allow',
}
],
'no-unused-expressions': 'off', 'no-unused-expressions': 'off',
'@typescript-eslint/no-unused-expressions': 'warn', '@typescript-eslint/no-unused-expressions': 'warn',
'no-unused-vars': 'off', 'no-unused-vars': 'off',
@ -57,7 +78,6 @@ export default [
'arrow-body-style': ['warn', 'as-needed'], 'arrow-body-style': ['warn', 'as-needed'],
'block-scoped-var': 'warn', 'block-scoped-var': 'warn',
camelcase: 'warn',
'capitalized-comments': 'warn', 'capitalized-comments': 'warn',
'consistent-return': 'warn', 'consistent-return': 'warn',
'consistent-this': 'error', 'consistent-this': 'error',