60 lines
2.3 KiB
JavaScript
60 lines
2.3 KiB
JavaScript
import { Router } from 'express';
|
|
import db from '../../db/index.js';
|
|
|
|
const router = Router();
|
|
|
|
/**
|
|
* @openapi
|
|
* /depots-retraits:
|
|
* get:
|
|
* summary: Liste des mouvements de cash (dépôts / retraits)
|
|
* tags: [Dépôts / Retraits]
|
|
* security: [{ ApiKeyAuth: [] }]
|
|
* parameters:
|
|
* - in: query
|
|
* name: workspace
|
|
* schema: { type: string }
|
|
* description: >
|
|
* Slug du workspace à filtrer (ex. "crowdlending"). Absent par défaut :
|
|
* renvoie tous les workspaces confondus (les clés API restent globales,
|
|
* cf. project_workspaces_transformation.md) — 400 si le slug est inconnu.
|
|
* responses:
|
|
* 200: { description: Liste des mouvements }
|
|
* 400: { description: Slug de workspace inconnu }
|
|
*/
|
|
router.get('/', (req, res) => {
|
|
// Clé "Famille et entreprises" (scope_all) → tous les investisseurs du
|
|
// foyer ; clé mono-investisseur → filtre sur req.investisseurId.
|
|
const invCond = req.investisseurScopeAll
|
|
? 'dr.investisseur_id IN (SELECT id FROM investisseurs WHERE user_id = ?)'
|
|
: 'dr.investisseur_id = ?';
|
|
const invParam = req.investisseurScopeAll ? req.userId : req.investisseurId;
|
|
|
|
const conds = [invCond];
|
|
const args = [invParam];
|
|
|
|
// Filtre optionnel par workspace (17/09/26, décision explicite d'Olivier) :
|
|
// absent par défaut → comportement inchangé, tous workspaces confondus (les
|
|
// clés API/MCP restent globales, décision du 08/09/26) ; ?workspace=<slug>
|
|
// permet à un outil MCP de cibler un workspace précis — slug plutôt qu'un id
|
|
// brut, portable entre installations comme pour l'export/import ZIP.
|
|
if (req.query.workspace) {
|
|
const ws = db.prepare('SELECT id FROM workspaces WHERE slug = ?').get(String(req.query.workspace));
|
|
if (!ws) return res.status(400).json({ error: `Workspace inconnu : "${req.query.workspace}"` });
|
|
conds.push('dr.workspace_id = ?');
|
|
args.push(ws.id);
|
|
}
|
|
|
|
const rows = db.prepare(`
|
|
SELECT dr.id, dr.date_operation, p.nom AS plateforme_nom, dr.type,
|
|
dr.montant, dr.libelle
|
|
FROM depots_retraits dr
|
|
JOIN plateformes p ON p.id = dr.plateforme_id
|
|
WHERE ${conds.join(' AND ')}
|
|
ORDER BY dr.date_operation DESC
|
|
`).all(...args);
|
|
res.json(rows);
|
|
});
|
|
|
|
export default router;
|