/** * Point d'entrée du process. Toute la logique vit dans app.js pour rester * testable ; ce fichier ne fait qu'ouvrir la connexion DB et écouter. */ import pg from "pg"; import { buildServer } from "./app.js"; const { Pool } = pg; const PORT = Number(process.env.PORT || 3000); const DATABASE_URL = process.env.DATABASE_URL; const pool = DATABASE_URL ? new Pool({ connectionString: DATABASE_URL, statement_timeout: 60000 }) : null; const fastify = await buildServer({ pool, logger: true }); // `listen()` renvoie une promesse : sans catch, un port déjà pris produisait un // unhandled rejection et un process zombie au lieu d'un exit code non nul (que // Docker/Coolify utilisent pour redémarrer le conteneur). fastify.listen({ port: PORT, host: "0.0.0.0" }).catch((err) => { fastify.log.error(err, "[api] listen failed"); process.exit(1); });