import { Controller, Get } from "@nestjs/common"; import { AppService } from "./app.service"; import { PrismaService } from "./prisma/prisma.service"; import type { ApiResponse, HealthStatus } from "@mosaic/shared"; import { successResponse } from "@mosaic/shared"; @Controller() export class AppController { constructor( private readonly appService: AppService, private readonly prisma: PrismaService ) {} @Get() getHello(): string { return this.appService.getHello(); } @Get("health") async getHealth(): Promise> { const dbHealthy = await this.prisma.isHealthy(); const dbInfo = await this.prisma.getConnectionInfo(); const overallStatus = dbHealthy ? "healthy" : "degraded"; const packageVersion = process.env.npm_package_version; return successResponse({ status: overallStatus, timestamp: new Date().toISOString(), ...(packageVersion && { version: packageVersion }), checks: { database: { status: dbHealthy ? "healthy" : "unhealthy", message: dbInfo.connected ? `Connected to ${dbInfo.database ?? "unknown"} (${dbInfo.version ?? "unknown"})` : "Database connection failed", }, }, }); } }