2b3128ce4a
fix(api): inscription parent — body 15mb, uploads persistants, 409 si unique PG
...
- NestExpressApplication + useBodyParser json/urlencoded 15mb
- UPLOAD_PHOTOS_DIR: résolution chemin absolu/relatif + doc .env.example / proxy
- docker-compose: volume backend_uploads + UPLOAD_PHOTOS_DIR par défaut
- Map erreur PostgreSQL 23505 → ConflictException (parent + AM)
- Logs Nest si échec SMTP après inscription (email déjà géré)
Made-with: Cursor
2026-04-10 17:40:23 +02:00
bf05b1d7d7
feat(inscription): email accusé réception, photos enfants, formulaires identité
...
- Backend: mail après inscription parent avec n° dossier, UPLOAD_PHOTOS_DIR, réponse API
- Frontend: imageBytes + payload photo, utils email/code postal/téléphone, champs dédiés
- Formulaires admin, login (focus), personal_info, child_card, custom_app_text_field
Made-with: Cursor
2026-03-31 00:04:38 +02:00
0e8a999e41
Merge branch 'feature/107-onglet-a-valider' into develop
...
Conflits pending-families : conservation du DTO/SQL develop (date_soumission, emails, parents).
Made-with: Cursor
2026-03-26 00:16:53 +01:00
2e02f60601
feat(admin): onglet À valider, dossier unifié et modales de validation
...
- Onglet « À valider » (AM + familles), pending-families et détail dossier par numéro.
- Wizards validation AM et famille, modale commune, chargement via GET /dossiers/:num.
- UI : cartes enfants, photo AM (cadre uniforme, ratio), NIR affiché formaté (espaces autour du tiret).
- Backend : DTO / routes parents pending ; scripts de test et mise à jour issue Gitea.
Tickets #107 , #119 .
Made-with: Cursor
2026-03-26 00:15:18 +01:00
0e6e473e84
feat: pending-families ajoute parents[] (email/tel/ville/cp) + ordre stable
...
Made-with: Cursor
2026-03-25 10:58:29 +01:00
cc3639b19a
fix: dossier AM expose texte_motivation (alias biographie) pour le front
...
Made-with: Cursor
2026-03-23 23:43:00 +01:00
cf9cd495bf
feat: enrichissement GET pending-families (date_soumission, nombre_enfants, emails)
...
Made-with: Cursor
2026-03-23 23:37:50 +01:00
76ba28a7ce
fix: dossier famille - un seul texte_motivation, plus de tableau presentation
...
Made-with: Cursor
2026-03-18 01:56:58 +01:00
1772744c81
feat( #119 ): dossier famille = 1 par famille, N enfants; retrait repas/type_contrat/budget; adresse dans API parents
...
Made-with: Cursor
2026-03-18 01:52:28 +01:00
5465117238
fix: renvoyer le genre des enfants dans le dossier famille (GET dossiers/parents)
...
Made-with: Cursor
2026-03-18 01:35:27 +01:00
6e2343087e
feat( #119 ): GET /dossiers/:numeroDossier unifié AM ou famille (type + dossier)
...
Made-with: Cursor
2026-03-17 23:11:53 +01:00
f6fabc521e
feat( #119 ): GET /parents/dossier-famille/:numeroDossier - dossier famille complet (admin/gestionnaire)
...
Made-with: Cursor
2026-03-17 22:40:48 +01:00
5390276ecd
fix: ParentsModule - import JwtModule pour AuthGuard (évite restart loop au déploiement)
...
Made-with: Cursor
2026-03-13 16:49:39 +01:00
7e9306de01
fix: GET /parents/pending-families 500 + #113 doublons inscription
...
- parents.service: normaliser parentIds (array ou string PG) pour éviter 500
- auth.service: doublons à l'inscription (#113 ) - parent/co-parent même email, NIR et numéro agrément AM
- docs: mise à jour statuts tickets
Made-with: Cursor
2026-03-13 16:30:12 +01:00
86b28abe51
feat( #111 ): Reprise après refus – backend
...
- GET /auth/reprise-dossier?token= : dossier pour préremplir (token seul)
- PATCH /auth/reprise-resoumettre : token + champs modifiables → en_attente, token invalidé
- POST /auth/reprise-identify : numero_dossier + email → type + token
- UserService: findByTokenReprise, resoumettreReprise, findByNumeroDossierAndEmailForReprise
Made-with: Cursor
2026-03-12 23:04:45 +01:00
86d8189038
feat( #110 ): Refus sans suppression – token reprise + email
...
- Colonnes token_reprise, token_reprise_expire_le (migration + BDD.sql)
- refuser: génère token (7j), enregistre, trace validations, envoie email (template refus + lien reprise)
- MailService.sendRefusEmail ; échec email ne bloque pas le refus
Made-with: Cursor
2026-03-12 22:56:27 +01:00
dbcb3611d4
feat( #108 ): Validation dossier famille – POST /parents/:parentId/valider-dossier
...
- getFamilyUserIds(parentId) : tous les user_id de la famille (co_parent + enfants partagés)
- Valide en une fois tous les comptes en_attente/refuse de la famille (validateUser)
- Réponse : liste des Users validés
Made-with: Cursor
2026-03-12 22:46:17 +01:00
1fa70f4052
feat( #106 ): Liste familles en attente – GET /parents/pending-families
...
- Une entrée par famille (co_parent + enfants partagés, même logique que backfill #103 )
- libelle, parentIds, numero_dossier ; filtre statut en_attente
- AuthGuard + RolesGuard sur controller parents
Made-with: Cursor
2026-03-12 22:36:16 +01:00
393a527c37
feat( #105 ): Statut « refusé » – enum, migration, pending/reprise, refuser, connexion
...
- Enum statut_utilisateur_type + valeur 'refuse' (migration + BDD.sql)
- GET /users/reprise, PATCH /users/:id/refuser (refus_compte en validations)
- PATCH /users/:id/valider accepte en_attente et refuse (reprise)
- Connexion refusée si statut refuse
Made-with: Cursor
2026-03-12 22:21:12 +01:00
dfd58d9b6c
feat( #103 ): Numéro de dossier – backend
...
- Colonne numero_dossier (utilisateurs, assistantes_maternelles, parents)
- Table numero_dossier_sequence, format AAAA-NNNNNN, séquence par année
- Génération à la soumission AM et parent (famille)
- Backfill existants (famille = co_parent ou enfants partagés)
- API PATCH /users/:id/numero-dossier (gestionnaire/admin)
- Garde-fous: max 2 parents/dossier, pas de mélange AM/parent
Made-with: Cursor
2026-03-12 22:12:33 +01:00
f46740c6ab
feat( #102 ): validation NIR (format + clé 2A/2B) + warning cohérence
...
Made-with: Cursor
2026-02-26 11:23:22 +01:00
85bfef7a6b
feat( #102 ): DTO NIR - accepter 2A/2B Corse (15 caractères)
...
Made-with: Cursor
2026-02-26 11:21:45 +01:00
3c2ecdff7a
Merge branch 'feature/25-backend-pending-users' - feat( #25 ): API GET /users/pending
2026-02-26 10:43:09 +01:00
8b83702bd2
feat( #25 ): API GET /users/pending - liste comptes en attente
...
- UserController: endpoint GET /users/pending (rôles SUPER_ADMIN, ADMINISTRATEUR, GESTIONNAIRE)
- UserService: findPendingUsers(role?) avec filtre statut EN_ATTENTE
- GestionnairesService: retrait date_consentement_photo (non présent dans DTO)
Made-with: Cursor
2026-02-26 10:37:22 +01:00
5950d85876
feat(frontend): Bandeau générique, footer et doc ( #100 )
...
- ParentDashboardScreen : utilisation de DashboardBandeau et AppFooter
- app_footer : footer responsive (desktop / mobile)
- docs/23_LISTE-TICKETS.md : mise à jour liste des tickets
- docs/POINT_TICKETS_FRONT_API.txt : point tickets frontend/API
- backend/scripts : create-gitea-issue-parent-api.js, list-gitea-issues.js
Refs: #100
Made-with: Cursor
2026-02-25 21:44:59 +01:00
0579fda553
merge: intégrer feature/96-creation-admin-modale dans develop
...
Fusionne le ticket #96 avec résolution des conflits sur la modale partagée, les droits admin/super admin et l’harmonisation visuelle des listes utilisateurs.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 22:36:58 +01:00
2645cf1cd6
fix( #96 ): protéger le super admin en édition et suppression
...
Empêche la suppression d'un super administrateur et fige son identité (nom/prénom) côté API, avec alignement de la modale frontend pour masquer la suppression et verrouiller ces champs.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 22:05:17 +01:00
d66bdd04be
feat: admin creation modal and backend fixes for user updates ( #96 )
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 18:39:01 +01:00
d8572e7fd6
feat( #96 ): finaliser la modale admin/gestionnaire et les règles d’édition
...
Unifie la modale utilisateur pour création/édition admin et gestionnaire, fiabilise la saisie/normalisation (téléphone, nom/prénom) et corrige la mise à jour backend pour accepter le rattachement relais sans erreur 400.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 17:25:15 +01:00
537c46127f
feat(backend): implement create admin API (ticket #97 )
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 11:03:53 +01:00
ed18dcab10
fix(backend): simplify gestionnaire creation and set default status to ACTIF
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 10:25:42 +01:00
5c28981ac5
fix(backend): fix UpdateGestionnaireDto inheritance to include all user fields
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-23 23:52:56 +01:00
9d4363b2a7
fix(backend): remove adresse from CreateGestionnaireDto and service
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-23 23:19:43 +01:00
d0b730c8ab
feat(backend): implement gestionnaire creation with email notification ( #17 )
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-23 22:46:30 +01:00
d697083f54
feat(database): add Relais table to initialization script
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 14:34:45 +01:00
ae786426fd
feat(backend): implement Relais module and relation with Gestionnaire (Ticket #94 )
...
- Create Relais entity
- Create Relais module, controller, service with CRUD
- Update Users entity with ManyToOne relation to Relais
- Update GestionnairesService to handle relaisId
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 14:27:14 +01:00
e4f7a35f0f
fix( #92 ): activer endpoint GET /gestionnaires (note backend)
...
- UserModule: importer GestionnairesModule
- GestionnairesModule: importer AuthModule (AuthGuard/JwtService)
- user_service: appeler /gestionnaires au lieu de /users + filtre
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 22:46:11 +01:00
8a6768b316
feat(dashboard-admin): connect admin dashboard to real API data (Ticket #92 )
...
- Frontend:
- Create UserService to handle user-related API calls (gestionnaires, parents, AMs, admins)
- Update AdminDashboardScreen to use dynamic widgets
- Implement dynamic management widgets:
- GestionnaireManagementWidget
- ParentManagementWidget
- AssistanteMaternelleManagementWidget
- AdminManagementWidget
- Add data models: ParentModel, AssistanteMaternelleModel
- Update AppUser model
- Update ApiConfig
- Backend:
- Update controllers (Parents, AMs, Gestionnaires, Users) to allow ADMINISTRATEUR role to list users
- Note: Gestionnaires endpoint is currently bypassed in frontend (using /users filter) due to module import issue (documented in docs/92_NOTE-BACKEND-GESTIONNAIRES.md)
- Docs:
- Add note about backend fix for Gestionnaires module
- Update .cursorrules to forbid worktrees
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 21:43:27 +01:00
31bd8c3175
fix( #90 ): BDD assistantes_maternelles alignée entité + script test curl
...
- BDD.sql: ville_residence, annee_experience, specialite, date_agrement nullable
- scripts/test-register-am.sh pour tester POST /auth/register/am
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 16:18:06 +01:00
c94f2cf0d5
feat( #90 ): API Inscription AM - POST /auth/register/am
...
- DTO RegisterAMCompletDto (identité, photo, infos pro, CGU)
- Endpoint POST /auth/register/am + inscrireAMComplet() (transaction User + AssistanteMaternelle)
- Photo base64, token création MDP, consentement photo
- Suppression legacy: route register/parent/legacy, registerParent(), RegisterParentDto
- Frontend: ApiConfig.registerAM pour ticket #91
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 00:05:23 +01:00
ae3292a7fc
fix(backend): setup/complete accepte userId null pour éviter erreur UUID ( #14 )
...
- completeSetup: userId = req.user?.id ?? null (plus de fallback 'system')
- markSetupCompleted(userId: string | null), set(..., userId ?? undefined)
- Corrige 'invalid input syntax for type uuid: "system"' au clic Sauvegarder
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 23:19:18 +01:00
0386785f81
feat(backend): log des appels API en mode debug ( #89 )
...
- Ajout LogRequestInterceptor (méthode, URL, query, body)
- Activé via LOG_API_REQUESTS=true
- Masquage des champs sensibles (password, smtp_password, token...)
- Enregistrement global dans main.ts, doc dans .env.example
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 11:15:41 +01:00
264e0d49ae
fix: Configuration CORS explicite pour dev localhost
2026-01-27 16:36:53 +01:00
95d1c3741b
feat( #31 ): API Changement MDP obligatoire première connexion ( #77 )
...
Co-authored-by: Julien Martin <julien.martin@ptits-pas.fr>
Co-committed-by: Julien Martin <julien.martin@ptits-pas.fr>
2026-01-27 15:13:45 +00:00
c5028c3b22
feat( #75 ): Seed Super Administrateur par défaut ( #76 )
...
Co-authored-by: Julien Martin <julien.martin@ptits-pas.fr>
Co-committed-by: Julien Martin <julien.martin@ptits-pas.fr>
2026-01-27 15:07:22 +00:00
cef197d133
Merge master into develop - Synchronisation des branches
...
Fusion des travaux :
- Backend complet (ConfigService, DocumentsLegaux, Auth, etc.)
- Frontend étapes inscription 1-2
- Infrastructure Docker
- Documentation technique
Résolution des conflits :
- Images déplacées vers frontend/assets/images/
- Dossier Archives supprimé
- Backend : version master conservée
- Frontend : améliorations UI de develop conservées
2026-01-27 14:56:49 +01:00
9ae6533b4d
feat( #36 ): Inscription Parent - Étape 1 (Parent 1)
...
Backend:
- Retrait des champs non-CDC: profession, situation_familiale, date_naissance
- Nettoyage des DTOs RegisterParentCompletDto et RegisterParentDto
- Mise à jour de la logique dans auth.service.ts (inscrireParentComplet et legacy)
Frontend Step1:
- Suppression des champs mot de passe et confirmation
- Correction de l'indicateur d'étape: 1/5 → 1/6
- Améliorations visuelles:
* Taille des labels: 18 → 22px
* Taille de police des champs: 18 → 20px
* Espacement entre champs: 20 → 32px
* Meilleure répartition verticale avec spaceEvenly
Note: Le champ password est conservé dans le modèle ParentData pour compatibilité avec Step2
2025-12-01 23:19:58 +01:00
579b6cae90
[Backend] API Inscription Parent - REFONTE Workflow 6 etapes ( #72 )
...
Co-authored-by: Julien Martin <julien.martin@ptits-pas.fr>
Co-committed-by: Julien Martin <julien.martin@ptits-pas.fr>
2025-12-01 21:43:36 +00:00
40c7f40d12
feat(backend): endpoint inscription parent + nettoyage code #9
...
🧹 NETTOYAGE CODE ÉTUDIANT:
- Suppression console.log/error (4 occurrences)
- Suppression code commenté inutile
- Suppression champs obsolètes (mobile, telephone_fixe)
- Correction password nullable dans Users entity
✨ NOUVELLES FONCTIONNALITÉS:
- Ajout champs token_creation_mdp dans Users entity
- Création RegisterParentDto (validation complète)
- Endpoint POST /auth/register/parent
- Méthode registerParent() avec transaction
- Gestion Parent 1 + Parent 2 (co-parent optionnel)
- Génération tokens UUID pour création MDP
- Lecture durée token depuis AppConfigService
- Création automatique entités Parents
- Statut EN_ATTENTE par défaut
- Intégration AppConfigModule dans AuthModule
- Amélioration méthode login() (vérif statut + password null)
📋 WORKFLOW CDC CONFORME:
- Inscription SANS mot de passe
- Token envoyé par email (TODO)
- Validation gestionnaire requise
- Support co-parent avec même adresse
Réf: docs/20_WORKFLOW-CREATION-COMPTE.md
Ticket: #9 (ou #16 )
2025-11-30 16:09:54 +01:00
f53fd903e5
feat(backend): API documents légaux #31
...
- Création DTOs (UploadDocumentDto, DocumentsActifsResponseDto, DocumentVersionDto)
- Création DocumentsLegauxController avec 6 endpoints:
* GET /documents-legaux/actifs (public)
* GET /documents-legaux/:type/versions (admin)
* POST /documents-legaux (upload, admin)
* PATCH /documents-legaux/:id/activer (admin)
* GET /documents-legaux/:id/download (public)
* GET /documents-legaux/:id/verifier-integrite (admin)
- Support upload multipart/form-data avec FileInterceptor
- Validation des types (cgu/privacy)
- Stream PDF pour téléchargement
- Intégration dans DocumentsLegauxModule
- Compilation OK
TODO: Ajouter guards auth (JwtAuthGuard, RolesGuard)
Réf: docs/22_DOCUMENTS-LEGAUX.md
2025-11-30 16:00:12 +01:00