mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 02:58:11 +00:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { Controller, Get, HttpStatus, Res } from '@nestjs/common';
|
|
import { ApiTags, ApiOperation } from '@nestjs/swagger';
|
|
import { SkipThrottle } from '@nestjs/throttler';
|
|
import { IsPublic } from '@tria-plc/api-common/modules/auth/decorators/public.decorator';
|
|
import { PrismaService } from '../../common/prisma.service';
|
|
import { Response } from 'express';
|
|
|
|
@ApiTags('Health')
|
|
@Controller('health')
|
|
@SkipThrottle()
|
|
export class HealthController {
|
|
constructor(private readonly prisma: PrismaService) {}
|
|
|
|
@Get()
|
|
@IsPublic()
|
|
@ApiOperation({ summary: 'Liveness probe' })
|
|
liveness() {
|
|
return { status: 'ok', timestamp: new Date().toISOString() };
|
|
}
|
|
|
|
@Get('ready')
|
|
@IsPublic()
|
|
@ApiOperation({ summary: 'Readiness probe — checks database connectivity' })
|
|
async readiness(@Res() res: Response) {
|
|
const start = Date.now();
|
|
try {
|
|
await this.prisma.$queryRaw`SELECT 1`;
|
|
return res.status(HttpStatus.OK).json({
|
|
status: 'ok',
|
|
timestamp: new Date().toISOString(),
|
|
checks: { database: { status: 'ok', latencyMs: Date.now() - start } },
|
|
});
|
|
} catch (err) {
|
|
return res.status(HttpStatus.SERVICE_UNAVAILABLE).json({
|
|
status: 'error',
|
|
timestamp: new Date().toISOString(),
|
|
checks: {
|
|
database: {
|
|
status: 'error',
|
|
latencyMs: Date.now() - start,
|
|
error: err instanceof Error ? err.message : 'Unknown error',
|
|
},
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
@Get('info')
|
|
@IsPublic()
|
|
@ApiOperation({ summary: 'App info — version, environment, uptime' })
|
|
info() {
|
|
return {
|
|
name: 'edr-passenger-api',
|
|
version: process.env.npm_package_version ?? '1.0.0',
|
|
environment: process.env.NODE_ENV ?? 'development',
|
|
uptimeSeconds: Math.floor(process.uptime()),
|
|
timestamp: new Date().toISOString(),
|
|
};
|
|
}
|
|
}
|