diff --git a/backend/package.json b/backend/package.json index b3486017..42934eae 100644 --- a/backend/package.json +++ b/backend/package.json @@ -26,10 +26,10 @@ "test-all": "ava --timeout=5m --serial", "test-saas": "ava test/ava-tests/saas-tests/* ", "typeorm": "ts-node -r tsconfig-paths/register ../node_modules/.bin/typeorm", - "migration:generate": "yarn run typeorm migration:generate -d dist/shared/config/datasource.config.js", - "migration:create": "yarn run typeorm migration:create -d dist/shared/config/datasource.config.js", - "migration:run": "yarn run typeorm migration:run -d dist/shared/config/datasource.config.js", - "migration:revert": "npm run typeorm -- migration:revert -d dist/shared/config/datasource.config.js", + "migration:generate": "yarn run typeorm migration:generate -d dist/src/shared/config/datasource.config.js", + "migration:create": "yarn run typeorm migration:create -d dist/src/shared/config/datasource.config.js", + "migration:run": "yarn run typeorm migration:run -d dist/src/shared/config/datasource.config.js", + "migration:revert": "npm run typeorm -- migration:revert -d dist/src/shared/config/datasource.config.js", "knip": "knip" }, "dependencies": { diff --git a/backend/src/authorization/auth-with-api.middleware.ts b/backend/src/authorization/auth-with-api.middleware.ts index 20fb77a5..38307be3 100644 --- a/backend/src/authorization/auth-with-api.middleware.ts +++ b/backend/src/authorization/auth-with-api.middleware.ts @@ -28,7 +28,6 @@ export class AuthWithApiMiddleware implements NestMiddleware { ) {} async use(req: Request, res: Response, next: (err?: any, res?: any) => void): Promise { - console.info(`Auth with api middleware triggered ->: ${new Date().toISOString()}`); try { await this.authenticateRequest(req); next(); diff --git a/backend/src/authorization/auth.middleware.ts b/backend/src/authorization/auth.middleware.ts index a01189a2..6ef58f50 100644 --- a/backend/src/authorization/auth.middleware.ts +++ b/backend/src/authorization/auth.middleware.ts @@ -27,7 +27,6 @@ export class AuthMiddleware implements NestMiddleware { private readonly logOutRepository: Repository, ) {} async use(req: Request, res: Response, next: (err?: any, res?: any) => void): Promise { - console.log(`auth middleware triggered ->: ${new Date().toISOString()}`); let token: string; try { token = req.cookies[Constants.JWT_COOKIE_KEY_NAME]; diff --git a/backend/src/entities/connection/ssl-certificate/read-certificate.ts b/backend/src/entities/connection/ssl-certificate/read-certificate.ts index 09e94a0b..919f73e6 100644 --- a/backend/src/entities/connection/ssl-certificate/read-certificate.ts +++ b/backend/src/entities/connection/ssl-certificate/read-certificate.ts @@ -9,7 +9,7 @@ export async function readSslCertificate(): Promise { const fileName = 'global-bundle.pem'; return new Promise((resolve, reject) => { fs.readFile( - join(__dirname, '..', '..', '..', '..', 'files', 'certificates', fileName), + join(__dirname, '..', '..', '..', '..', '..', 'files', 'certificates', fileName), 'utf8', function (err, data) { if (err) { diff --git a/backend/src/entities/email/template-engine/nunjucks.module.ts b/backend/src/entities/email/template-engine/nunjucks.module.ts index 3a407066..f1179e75 100644 --- a/backend/src/entities/email/template-engine/nunjucks.module.ts +++ b/backend/src/entities/email/template-engine/nunjucks.module.ts @@ -3,19 +3,20 @@ import * as nunjucks from 'nunjucks'; import { BaseType } from '../../../common/data-injection.tokens.js'; import path from 'path'; import { fileURLToPath } from 'url'; -import { isTest } from '../../../helpers/app/is-test.js'; +import { existsSync } from 'node:fs'; +import assert from 'assert'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); +const pathToTemplates = path.join(__dirname, '..', '..', '..', '..', '..', 'public', 'email-templates'); +assert(existsSync(pathToTemplates), `Email templates directory does not exist: ${__dirname} ${pathToTemplates}`); + @Global() @Module({ providers: [ { provide: BaseType.NUNJUCKS, useFactory: () => { - const pathToTemplates = isTest() - ? process.cwd() + '/public/email-templates' - : path.join(__dirname, '..', '..', '..', '..', 'public', 'email-templates'); const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(pathToTemplates)); return env; }, diff --git a/backend/src/entities/logging/winston-logger.ts b/backend/src/entities/logging/winston-logger.ts index 526da133..4c3c914b 100644 --- a/backend/src/entities/logging/winston-logger.ts +++ b/backend/src/entities/logging/winston-logger.ts @@ -18,6 +18,10 @@ export class WinstonLogger implements LoggerService { this.logger.info(message, ...optionalParams); } + public info(message: any, ...optionalParams: any[]) { + this.logger.info(message, ...optionalParams); + } + public error(message: any, ...optionalParams: any[]) { this.logger.error(message, ...optionalParams); } diff --git a/backend/src/middlewares/logging-middleware/app-logger-middlewate.ts b/backend/src/middlewares/logging-middleware/app-logger-middlewate.ts index 52d1a022..08fa2219 100644 --- a/backend/src/middlewares/logging-middleware/app-logger-middlewate.ts +++ b/backend/src/middlewares/logging-middleware/app-logger-middlewate.ts @@ -9,11 +9,11 @@ export class AppLoggerMiddleware implements NestMiddleware { use(request: Request, response: Response, next: NextFunction): void { const { ip, method, path: url, baseUrl } = request; const userAgent = request.get('user-agent') || ''; - this.logger.log(`START ${method} ${url}${baseUrl} - ${userAgent} ${ip}`, { context: 'HTTP' }); + this.logger.info(`START ${method} ${url}${baseUrl} - ${userAgent} ${ip}`, { context: 'HTTP' }); response.on('close', () => { const { statusCode } = response; const contentLength = response.get('content-length'); - this.logger.log( + this.logger.info( `method: ${method}, url: ${url}, statusCode: ${statusCode}, contentLength: ${contentLength}, userAgent: ${userAgent}, ip: ${ip}`, { context: 'HTTP' }, ); diff --git a/backend/tsconfig.json b/backend/tsconfig.json index c2a55682..9d487891 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -10,6 +10,7 @@ "target": "ESNext", "sourceMap": true, "outDir": "./dist", + "rootDir": "./", "baseUrl": "./", "incremental": true, "moduleResolution": "node", diff --git a/docker-compose.tst.yml b/docker-compose.tst.yml index c2caf07e..46f1dd70 100644 --- a/docker-compose.tst.yml +++ b/docker-compose.tst.yml @@ -37,6 +37,7 @@ services: environment: - "DATABASE_URL=postgres://postgres:abc123@postgres:5432/postgres" - "EXTRA_ARGS=$EXTRA_ARGS" + - LOG_LEVEL=warn volumes: - ./backend/src/migrations:/app/src/migrations depends_on: diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-mssql.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-mssql.ts index db5b01e7..f3d2c8a4 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-mssql.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-mssql.ts @@ -385,7 +385,7 @@ WHERE TABLE_TYPE = 'VIEW' } const knex = await this.configureKnex(); try { - await knex().select(1); + await knex.queryBuilder().select(1); return { result: true, message: 'Successfully connected', @@ -472,18 +472,18 @@ WHERE TABLE_TYPE = 'VIEW' knex .raw( ` - SELECT + SELECT OBJECT_NAME(f.parent_object_id) "table_name", COL_NAME(fc.parent_object_id,fc.parent_column_id) "column_name" - FROM + FROM sys.foreign_keys AS f - INNER JOIN - sys.foreign_key_columns AS fc + INNER JOIN + sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id - INNER JOIN - sys.tables t + INNER JOIN + sys.tables t ON t.OBJECT_ID = fc.referenced_object_id - WHERE + WHERE OBJECT_NAME (f.referenced_object_id) = ? `, tableName, diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-mysql.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-mysql.ts index caa1d880..95594eff 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-mysql.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-mysql.ts @@ -431,7 +431,7 @@ export class DataAccessObjectMysql extends BasicDataAccessObject implements IDat } const knex = await this.configureKnex(); try { - await knex().select(1); + await knex.queryBuilder().select(1); return { result: true, message: 'Successfully connected', diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-oracle.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-oracle.ts index 6efc518d..8324357b 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-oracle.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-oracle.ts @@ -494,7 +494,7 @@ export class DataAccessObjectOracle extends BasicDataAccessObject implements IDa } const knex = await this.configureKnex(); const schema = this.connection.schema ?? this.connection.username.toUpperCase(); - const structureColumns = await knex() + const structureColumns = await knex.queryBuilder() .select('COLUMN_NAME', 'DATA_DEFAULT', 'DATA_TYPE', 'NULLABLE', 'DATA_LENGTH') .from('ALL_TAB_COLUMNS') .orderBy('COLUMN_ID') diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-postgres.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-postgres.ts index 67cc5bee..1787a4e5 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-postgres.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-postgres.ts @@ -342,7 +342,6 @@ export class DataAccessObjectPostgres extends BasicDataAccessObject implements I const bindings = [schema]; try { const results = await knex.raw(query, bindings); - console.log({ tablesPg: results }); return results.rows.map((row: Record) => ({ tableName: row.table_name, isView: !!row.is_view })); } catch (error) { console.log({ tablesPg: error }); @@ -434,7 +433,7 @@ export class DataAccessObjectPostgres extends BasicDataAccessObject implements I } const knex = await this.configureKnex(); try { - await knex().select(1); + await knex.queryBuilder().select(1); return { result: true, message: 'Successfully connected',