freedge/backend/src/server.js
2025-03-13 22:31:10 +01:00

45 lines
1.4 KiB
JavaScript

const fastify = require('fastify')({ logger: true });
const { PrismaClient } = require('@prisma/client');
require('dotenv').config();
// Création de l'instance Prisma
const prisma = new PrismaClient();
// Plugins
fastify.register(require('@fastify/cors'), {
origin: true, // Autoriser toutes les origines en développement
// Ou spécifier correctement les origines autorisées :
// origin: ['http://localhost:5173', 'http://127.0.0.1:5173'],
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true
});
fastify.register(require('./plugins/auth'));
fastify.register(require('./plugins/stripe'));
fastify.register(require('./plugins/ai'));
fastify.register(require('./plugins/google-auth'));
// Routes
fastify.register(require('./routes/auth'), { prefix: '/auth' });
fastify.register(require('./routes/recipes'), { prefix: '/recipes' });
fastify.register(require('./routes/users'), { prefix: '/users' });
// Hook pour fermer la connexion Prisma à l'arrêt du serveur
fastify.addHook('onClose', async (instance, done) => {
await prisma.$disconnect();
done();
});
// Décoration pour rendre prisma disponible dans les routes
fastify.decorate('prisma', prisma);
// Démarrage du serveur
const start = async () => {
try {
await fastify.listen({ port: process.env.PORT || 3000, host: '0.0.0.0' });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();