import { Controller, Get, Inject, ServiceUnavailableException } from '@nestjs/common'; import { InjectConnection } from '@nestjs/mongoose'; import { Connection } from 'mongoose'; import { NOTIFICATION_SERVICE_STATE, NotificationServiceState } from './service-state'; @Controller('health') export class HealthController { constructor( @InjectConnection() private readonly connection: Connection, @Inject(NOTIFICATION_SERVICE_STATE) private readonly state: NotificationServiceState, ) {} @Get() @Get('live') live() { return { status: this.state.draining ? 'draining' : 'ok', service: 'notification-service' }; } @Get('ready') async ready() { const mongodbReady = this.connection.readyState === 1; const ready = !this.state.draining && mongodbReady && this.state.rabbitmqReady; const response = { status: ready ? 'ready' : 'not-ready', service: 'notification-service', checks: { mongodb: mongodbReady, rabbitmq: this.state.rabbitmqReady }, }; if (!ready) throw new ServiceUnavailableException(response); return response; } }