fix: mouvements/types - grouper par GenreMvt uniquement (évite 28MB pour les tickets)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Sonnet 4.6 committed 2026-03-18 16:52:45 +01:00
1 parent c98f6834a8
commit f052529db6
1 file changed
+23 -6
+23 -6
View File
@@ -2,17 +2,34 @@ const express = require('express');
const router = express.Router(); const router = express.Router();
const { getPool } = require('../config/database'); const { getPool } = require('../config/database');
// GET /api/mouvements/types - Liste des types de mouvements distincts dans la base // GET /api/mouvements/types - Codes GenreMvt distincts avec total
// Pour GenreMvt=3 (ventes), LibMvt contient les numéros de ticket → on groupe uniquement par GenreMvt
router.get('/types', async (req, res) => { router.get('/types', async (req, res) => {
try { try {
const pool = getPool(); const pool = getPool();
const result = await pool.query(` // Libellés représentatifs pour les types hors ventes
SELECT GenreMvt, LibMvt, COUNT(*) AS nb_occurrences const libmvts = await pool.query(`
SELECT DISTINCT ON (GenreMvt) GenreMvt, LibMvt
FROM MvtArt FROM MvtArt
GROUP BY GenreMvt, LibMvt WHERE GenreMvt != 3
ORDER BY GenreMvt, nb_occurrences DESC ORDER BY GenreMvt, LibMvt
`); `);
res.json({ types: result.rows }); const labelsMap = Object.fromEntries(libmvts.rows.map(r => [r.genremvt, r.libmvt]));
const result = await pool.query(`
SELECT GenreMvt, COUNT(*) AS nb_occurrences
FROM MvtArt
GROUP BY GenreMvt
ORDER BY GenreMvt
`);
res.json({
types: result.rows.map(r => ({
genremvt: r.genremvt,
libmvt: r.genremvt == 3 ? '(numéros de ticket)' : (labelsMap[r.genremvt] ?? null),
nb_occurrences: r.nb_occurrences,
}))
});
} catch (err) { } catch (err) {
res.status(500).json({ error: err.message }); res.status(500).json({ error: err.message });
} }