Files
Apiflow/src/app.js
T

87 lines
3.9 KiB
JavaScript

require('dotenv').config();
const express = require('express');
const { getPool } = require('./config/database');
const schemaRouter = require('./routes/schema');
const articlesRouter = require('./routes/articles');
const fournisseursRouter = require('./routes/fournisseurs');
const commandesRouter = require('./routes/commandes');
const stockRouter = require('./routes/stock');
const mouvementsRouter = require('./routes/mouvements');
const performanceRouter = require('./routes/performance');
const syncRouter = require('./routes/sync');
const rankingRouter = require('./routes/ranking');
const publicitesRouter = require('./routes/publicites');
const commandesAutoRouter = require('./routes/commandes-auto');
const app = express();
app.use(express.json());
// Health check
app.get('/api/health', async (req, res) => {
try {
const pool = getPool();
await pool.query('SELECT 1 AS ok');
res.json({ status: 'ok', database: process.env.PG_DB, server: process.env.PG_HOST });
} catch (err) {
res.status(500).json({ status: 'error', detail: err.message });
}
});
// Routes
app.use('/api/schema', schemaRouter);
app.use('/api/articles', articlesRouter);
app.use('/api/fournisseurs', fournisseursRouter);
app.use('/api/commandes', commandesRouter);
app.use('/api/stock', stockRouter);
app.use('/api/mouvements', mouvementsRouter);
app.use('/api/performance', performanceRouter);
app.use('/api/sync', syncRouter);
app.use('/api/ranking', rankingRouter);
app.use('/api/publicites', publicitesRouter);
app.use('/api/commandes-auto', commandesAutoRouter);
// 404
app.use((req, res) => {
res.status(404).json({ error: 'Route introuvable' });
});
const PORT = process.env.API_PORT || 3000;
app.listen(PORT, () => {
console.log(`\nAPI Foirfouille démarrée sur http://localhost:${PORT}`);
console.log(`Base : ${process.env.PG_HOST}/${process.env.PG_DB} (PostgreSQL)\n`);
console.log('Endpoints disponibles :');
console.log(' GET /api/health');
console.log(' GET /api/schema/tables[?search=]');
console.log(' GET /api/schema/top[?limit=]');
console.log(' GET /api/schema/tables/:nom');
console.log(' GET /api/articles[?search=&codein=&ean=&codefou=&actif=&page=&limit=]');
console.log(' GET /api/articles/:id');
console.log(' GET /api/articles/:id/referentiel');
console.log(' GET /api/articles/:id/dernier-fournisseur[?site=]');
console.log(' GET /api/articles/:id/mouvements');
console.log(' GET /api/fournisseurs[?search=]');
console.log(' GET /api/fournisseurs/:code/articles');
console.log(' GET /api/fournisseurs/:code/commandes');
console.log(' GET /api/fournisseurs/:code/franco');
console.log(' GET /api/commandes[?dateDebut=&dateFin=&codefou=]');
console.log(' GET /api/commandes/:noCommande');
console.log(' GET /api/commandes/receptions/liste');
console.log(' GET /api/stock[?site=]');
console.log(' GET /api/stock/article/:id');
console.log(' GET /api/stock/site/:site');
console.log(' GET /api/stock/valorisation');
console.log(' GET /api/mouvements/articles[?dateDebut=&dateFin=&site=]');
console.log(' GET /api/mouvements/reglements[?dateDebut=&dateFin=]');
console.log(' GET /api/mouvements/synthese[?dateDebut=&dateFin=&site=]');
console.log(' GET /api/performance/ca[?dateDebut=&dateFin=&site=&groupBy=jour|mois]');
console.log(' GET /api/performance/hitparade[?dateDebut=&dateFin=&site=&limit=&groupBy=qte|ca|marge]');
console.log(' GET /api/performance/ca/nomenclature[?dateDebut=&dateFin=&site=&niveau=]');
console.log(' GET /api/performance/ca/gamme[?dateDebut=&dateFin=&site=]');
console.log(' GET /api/publicites[?search=&site=&dateDebut=&dateFin=&page=&limit=]');
console.log(' GET /api/publicites/:code[?site=]');
console.log(' GET /api/commandes-auto[?site=&codefou=]');
console.log(' GET /api/commandes-auto/:codefou[?site=]');
console.log(' GET /api/sync/status');
});