Implementation de la feature de gestion des fichiers sur les investissements

This commit is contained in:
ocroguennec committed 2026-08-29 18:49:01 +02:00
1 parent f6829dec9d
commit 8953d0bb35
21 files changed
+1729 -181

No files matched your search

+13 -1
View File
@@ -3,6 +3,7 @@ import { z } from 'zod';
import db from '../db/index.js';
import { HttpError } from '../middleware/errorHandler.js';
import { createZip, readZip } from '../utils/zip.js';
import { deleteDocumentsForEntity } from './documents.js';
import multer from 'multer';
import path from 'node:path';
import fs from 'node:fs';
@@ -722,7 +723,7 @@ router.post('/:id/purge-donnees', (req, res, next) => {
}
const platId = plat.id;
const counts = { depots_retraits: 0, investissements: 0, remboursements: 0, simul_remboursements: 0 };
const counts = { depots_retraits: 0, investissements: 0, remboursements: 0, simul_remboursements: 0, documents: 0 };
const tx = db.transaction(() => {
if (scope === 'depots_retraits' || scope === 'all') {
@@ -736,6 +737,12 @@ router.post('/:id/purge-donnees', (req, res, next) => {
`).run(platId).changes;
}
if (scope === 'investissements' || scope === 'all') {
// Récupérés avant suppression : sert à nettoyer les documents liés à
// ces investissements juste après (aucune contrainte de clé étrangère
// ne les supprime automatiquement, cf. entity_id polymorphe) — une
// fois les investissements supprimés, leurs ids ne sont plus retrouvables.
const invIds = db.prepare('SELECT id FROM investissements WHERE plateforme_id = ?').all(platId).map(r => r.id);
// Compte avant suppression : les remboursements et l'échéancier simulé sont
// supprimés en cascade (ON DELETE CASCADE) par la suppression des investissements.
counts.remboursements = db.prepare(`
@@ -747,6 +754,11 @@ router.post('/:id/purge-donnees', (req, res, next) => {
WHERE investissement_id IN (SELECT id FROM investissements WHERE plateforme_id = ?)
`).get(platId).n;
counts.investissements = db.prepare('DELETE FROM investissements WHERE plateforme_id = ?').run(platId).changes;
// Documents liés à ces investissements (lignes + fichiers sur disque).
for (const invId of invIds) {
counts.documents += deleteDocumentsForEntity(req.user.id, 'investissement', invId);
}
}
});
tx();