Files
crowdlending-app/backend/src/routes/v1/depotsRetraits.js
T

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;