- Dossiers unifiés #119, pending-families enrichi, validation admin (wizards) - Front: modèles dossier_unifie / pending_family, NIR, auth - Migrations dossier_famille, scripts de test API - Résolution conflits: parents.*, docs tickets, auth_service, nir_utils Made-with: Cursor
98 lines
3.7 KiB
JavaScript
98 lines
3.7 KiB
JavaScript
/**
|
||
* Met à jour l'issue Gitea #119 : endpoint unifié GET /dossiers/:numeroDossier (option A)
|
||
* Usage: node backend/scripts/update-gitea-issue-119-dossiers.js
|
||
* Token : .gitea-token (racine), GITEA_TOKEN, ou docs/BRIEFING-FRONTEND.md
|
||
*/
|
||
const https = require('https');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const repoRoot = path.join(__dirname, '../..');
|
||
let token = process.env.GITEA_TOKEN;
|
||
if (!token) {
|
||
try {
|
||
const tokenFile = path.join(repoRoot, '.gitea-token');
|
||
if (fs.existsSync(tokenFile)) token = fs.readFileSync(tokenFile, 'utf8').trim();
|
||
} catch (_) {}
|
||
}
|
||
if (!token) {
|
||
try {
|
||
const briefing = fs.readFileSync(path.join(repoRoot, 'docs/BRIEFING-FRONTEND.md'), 'utf8');
|
||
const m = briefing.match(/Token:\s*(giteabu_[a-f0-9]+)/);
|
||
if (m) token = m[1].trim();
|
||
} catch (_) {}
|
||
}
|
||
if (!token) {
|
||
console.error('Token non trouvé');
|
||
process.exit(1);
|
||
}
|
||
|
||
const body = `## Besoin
|
||
|
||
Un **seul** endpoint **GET par numéro de dossier** qui renvoie le dossier complet, **AM ou famille** selon le numéro. Clé unique = numéro de dossier (usage : modale de validation, consultation gestionnaire, reprise, etc.).
|
||
|
||
**Option A – Endpoint unifié**
|
||
|
||
- **Route** : \`GET /api/v1/dossiers/:numeroDossier\` (ou \`GET /dossiers/:numeroDossier\` selon préfixe API).
|
||
- Le backend détermine si le numéro appartient à une **AM** ou à une **famille** (ex. lookup \`users\` / \`parents\` / \`assistantes_maternelles\`).
|
||
- **Réponse** avec discriminent :
|
||
- \`{ type: 'family', dossier: { numero_dossier, parents, enfants, presentation } }\`
|
||
- \`{ type: 'am', dossier: { numero_dossier, user, ... } }\` (fiche AM complète, champs utiles sans secrets)
|
||
- **Rôles** : SUPER_ADMIN, ADMINISTRATEUR, GESTIONNAIRE.
|
||
- **Réponses** : 200 (dossier), 403, 404 (numéro inconnu).
|
||
|
||
Aucun filtre par statut : on renvoie le dossier s'il existe ; le front affiche Valider/Refuser selon le statut.
|
||
|
||
**Labels suggérés** : backend, api, dossiers, gestionnaire
|
||
|
||
---
|
||
|
||
## Implémentation
|
||
|
||
- **Nouveau module ou route** : \`GET /dossiers/:numeroDossier\`.
|
||
- **Service** : trouver qui possède ce \`numero_dossier\` (famille → \`parents\`, AM → \`users\` + \`assistantes_maternelles\`). Appeler la logique existante dossier-famille ou construire le payload AM, puis retourner \`{ type, dossier }\`.
|
||
- **Réutiliser** : la logique actuelle \`GET /parents/dossier-famille/:numeroDossier\` peut être appelée en interne pour \`type: 'family'\` ; ajouter une branche \`type: 'am'\` avec un DTO « dossier AM complet ».
|
||
- DTO(s) : garder \`DossierFamilleCompletDto\` pour la famille ; ajouter un DTO pour le dossier AM (user sans secrets + infos AM). Réponse unifiée : \`{ type: 'am' | 'family', dossier: ... }\`.`;
|
||
|
||
const payload = JSON.stringify({
|
||
title: 'Endpoint unifié GET /dossiers/:numeroDossier (AM ou famille)',
|
||
body,
|
||
});
|
||
|
||
const opts = {
|
||
hostname: 'git.ptits-pas.fr',
|
||
path: '/api/v1/repos/jmartin/petitspas/issues/119',
|
||
method: 'PATCH',
|
||
headers: {
|
||
Authorization: 'token ' + token,
|
||
'Content-Type': 'application/json',
|
||
'Content-Length': Buffer.byteLength(payload),
|
||
},
|
||
};
|
||
|
||
const req = https.request(opts, (res) => {
|
||
let d = '';
|
||
res.on('data', (c) => (d += c));
|
||
res.on('end', () => {
|
||
try {
|
||
const o = JSON.parse(d);
|
||
if (o.number || o.id) {
|
||
console.log('Issue #119 mise à jour.');
|
||
console.log('URL:', o.html_url || 'https://git.ptits-pas.fr/jmartin/petitspas/issues/119');
|
||
} else {
|
||
console.error('Erreur API:', o.message || d);
|
||
process.exit(1);
|
||
}
|
||
} catch (e) {
|
||
console.error('Réponse:', d);
|
||
process.exit(1);
|
||
}
|
||
});
|
||
});
|
||
req.on('error', (e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
});
|
||
req.write(payload);
|
||
req.end();
|