From f3eaabf3efb41242eaed8b2b38d09fa53dc952c9 Mon Sep 17 00:00:00 2001 From: Prudent Bird Date: Wed, 24 Jul 2024 12:07:42 +0100 Subject: [PATCH] fix added api controller modified data source for cloud based postgres added ssl config to data source ssl defaults to false cleaned up health controller fixed lint errors --- src/api.controller.ts | 17 ++++++++++ src/app.module.ts | 3 +- src/database/data-source.ts | 1 + src/health.controller.ts | 4 +-- src/main.ts | 66 +++++++++++++++++++++---------------- 5 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 src/api.controller.ts diff --git a/src/api.controller.ts b/src/api.controller.ts new file mode 100644 index 000000000..06c865aba --- /dev/null +++ b/src/api.controller.ts @@ -0,0 +1,17 @@ +import { Controller, Get } from '@nestjs/common'; +import { skipAuth } from './helpers/skipAuth'; + +@Controller() +export default class ApiController { + @skipAuth() + @Get('api') + public home() { + return { status_code: 200, message: 'Welcome to NestJs Backend Endpoint' }; + } + + @skipAuth() + @Get('api/v1') + public v1() { + return { status_code: 200, message: 'Welcome to version 1 of NestJS Backend Endpoint' }; + } +} diff --git a/src/app.module.ts b/src/app.module.ts index 1b42dbec2..2b5427495 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -8,6 +8,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import dataSource from './database/data-source'; import { SeedingModule } from './database/seeding/seeding.module'; import HealthController from './health.controller'; +import ApiController from './api.controller'; import { AuthModule } from './modules/auth/auth.module'; import { UserModule } from './modules/user/user.module'; import authConfig from '../config/auth.config'; @@ -65,6 +66,6 @@ import { AuthGuard } from './guards/auth.guard'; UserModule, OrganisationsModule, ], - controllers: [HealthController], + controllers: [HealthController, ApiController], }) export class AppModule {} diff --git a/src/database/data-source.ts b/src/database/data-source.ts index 41288c6cd..53a889402 100644 --- a/src/database/data-source.ts +++ b/src/database/data-source.ts @@ -16,6 +16,7 @@ const dataSource = new DataSource({ migrations: [process.env.DB_MIGRATIONS], synchronize: isDevelopment, migrationsTableName: 'migrations', + ssl: process.env.DB_SSL === 'true', }); export async function initializeDataSource() { diff --git a/src/health.controller.ts b/src/health.controller.ts index 1febfebc4..3ae515386 100644 --- a/src/health.controller.ts +++ b/src/health.controller.ts @@ -6,12 +6,12 @@ export default class HealthController { @skipAuth() @Get('/') public home() { - return { status_code: 200, message: 'Welcome to NestJs Backend Endpoint ......' }; + return { status_code: 200, message: 'Welcome to NestJs Backend Endpoint' }; } @skipAuth() @Get('health') public health() { - return 'healthy endpoint'; + return { status_code: 200, message: 'This is a healthy endpoint' }; } } diff --git a/src/main.ts b/src/main.ts index 77596ba8a..a8afa28f4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,42 +9,50 @@ import dataSource, { initializeDataSource } from './database/data-source'; import { SeedingService } from './database/seeding/seeding.service'; async function bootstrap() { - const app = await NestFactory.create(AppModule, { bufferLogs: true }); + try { + const app = await NestFactory.create(AppModule, { bufferLogs: true }); - const logger = app.get(Logger); + const logger = app.get(Logger); - const dataSource = app.get(DataSource); + const dataSource = app.get(DataSource); - try { - await initializeDataSource(); - console.log('Data Source has been initialized!'); - } catch (err) { - console.error('Error during Data Source initialization', err); - process.exit(1); - } + try { + await initializeDataSource(); + console.log('Data Source has been initialized!'); + } catch (err) { + console.error('Error during Data Source initialization', err); + process.exit(1); + } - const seedingService = app.get(SeedingService); - await seedingService.seedDatabase(); + const seedingService = app.get(SeedingService); + await seedingService.seedDatabase(); - app.enable('trust proxy'); - app.useLogger(logger); - app.enableCors(); - app.setGlobalPrefix('api/v1', { exclude: ["/", "health"] }); + app.enable('trust proxy'); + app.useLogger(logger); + app.enableCors(); + app.setGlobalPrefix('api/v1', { exclude: ['/', 'health', 'api', 'api/v1'] }); - // TODO: set options for swagger docs - const options = new DocumentBuilder() - .setTitle('') - .setDescription('') - .setVersion('1.0') - .addBearerAuth() - .build(); + // TODO: set options for swagger docs + const options = new DocumentBuilder() + .setTitle('') + .setDescription('') + .setVersion('1.0') + .addBearerAuth() + .build(); - const document = SwaggerModule.createDocument(app, options); - SwaggerModule.setup('api', app, document); + const document = SwaggerModule.createDocument(app, options); + SwaggerModule.setup('api/docs', app, document); - const port = app.get(ConfigService).get('server.port'); - await app.listen(port); + const port = app.get(ConfigService).get('server.port'); + await app.listen(port); - logger.log({ message: 'server started 🚀', port, url: `http://localhost:${port}/api` }); + logger.log({ message: 'server started 🚀', port, url: `http://localhost:${port}/api/v1` }); + } catch (err) { + console.error('Error during bootstrap', err); + process.exit(1); + } } -bootstrap(); +bootstrap().catch(err => { + console.error('Error during bootstrap', err); + process.exit(1); +});