import { Controller, Get, Inject } from '@nestjs/common'; import { HealthCheckService, HealthCheck, HealthCheckResult, } from '@nestjs/terminus'; import { MESSAGE_PUBLISHER } from 'src/app.constants'; import { IPublishMessage } from 'src/interfaces/message-publisher'; import { RepositoriesHealthIndicatorUseCase } from '../../domain/usecases/repositories.health-indicator.usecase'; @Controller('health') export class HealthController { constructor( private readonly repositoriesHealthIndicatorUseCase: RepositoriesHealthIndicatorUseCase, private healthCheckService: HealthCheckService, @Inject(MESSAGE_PUBLISHER) private readonly messagePublisher: IPublishMessage, ) {} @Get() @HealthCheck() async check() { try { return await this.healthCheckService.check([ async () => this.repositoriesHealthIndicatorUseCase.isHealthy('repositories'), ]); } catch (error) { const healthCheckResult: HealthCheckResult = error.response; this.messagePublisher.publish( 'logging.user.health.crit', JSON.stringify(healthCheckResult.error), ); throw error; } } }