From e0debf03940f0d2a7046c05e2d997998ec1b1596 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Mon, 16 Feb 2026 17:26:13 +0100 Subject: [PATCH] =?UTF-8?q?docs:=20README=20BDD=20seed/reset,=20liste=20ti?= =?UTF-8?q?ckets=20#92,=20proc=C3=A9dure=20API=20Gitea,=20statut=20applica?= =?UTF-8?q?tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- database/README.md | 10 ++ docs/23_LISTE-TICKETS.md | 52 +++++++---- docs/PROCEDURE-API-GITEA.md | 176 ++++++++++++++++++++++++++++++++++++ docs/STATUS-APPLICATION.md | 115 +++++++++++++++++++++++ 4 files changed, 337 insertions(+), 16 deletions(-) create mode 100644 docs/PROCEDURE-API-GITEA.md create mode 100644 docs/STATUS-APPLICATION.md diff --git a/database/README.md b/database/README.md index 4ebcd90..98200b5 100644 --- a/database/README.md +++ b/database/README.md @@ -41,6 +41,16 @@ docker compose -f docker-compose.dev.yml down -v --- +## Réinitialiser la BDD et charger les données de test (dashboard admin) + +Depuis la **racine du projet** (ptitspas-app, où se trouve `docker-compose.yml`) : + +```bash +./scripts/reset-and-seed-db.sh +``` + +Ce script : arrête les conteneurs, supprime le volume Postgres, redémarre la base (le schéma est recréé via `BDD.sql`), puis exécute `database/seed/03_seed_test_data.sql`. Tu obtiens un super_admin (`admin@ptits-pas.fr`) plus 9 comptes de test (1 admin, 1 gestionnaire, 2 AM, 5 parents) avec **mot de passe : `password`**. Idéal pour développer le ticket #92 (dashboard admin). + ## Importation automatique des données de test Les données de test (CSV) sont automatiquement importées dans la base au démarrage du conteneur Docker grâce aux scripts présents dans le dossier `migrations/`. diff --git a/docs/23_LISTE-TICKETS.md b/docs/23_LISTE-TICKETS.md index 8e0b98d..0d39b55 100644 --- a/docs/23_LISTE-TICKETS.md +++ b/docs/23_LISTE-TICKETS.md @@ -23,11 +23,12 @@ | 10 | [Backend] Service Configuration | ✅ Fermé | | 11 | [Backend] API Configuration | ✅ Fermé | | 12 | [Backend] Guard Configuration Initiale | ✅ Fermé | -| 13 | [Backend] Adaptation MailService pour config dynamique | Ouvert | +| 13 | [Backend] Adaptation MailService pour config dynamique | ✅ Fermé | | 14 | [Frontend] Panneau Paramètres / Configuration (première config + accès permanent) | Ouvert | | 15 | [Frontend] Écran Paramètres (accès permanent) | Ouvert | | 16 | [Doc] Documentation configuration on-premise | Ouvert | -| 17–88 | (voir sections ci‑dessous ; #78, #79, #81, #83, #82, #86, #87, #88, etc.) | — | +| 17–88 | (voir sections ci‑dessous ; #82, #78, #79, #81, #83 ; #86, #87, #88 fermés en doublon) | — | +| 92 | [Frontend] Dashboard Admin - Données réelles et branchement API | Ouvert | *Gitea #1 et #2 = anciens tickets de test (fermés). Liste complète : https://git.ptits-pas.fr/jmartin/petitspas/issues* @@ -229,6 +230,8 @@ Créer un Guard/Middleware qui détecte si la configuration initiale est incompl **Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#workflow-setup-initial) +*Issue Gitea #86 fermée en doublon ; ce ticket (#12) est la référence.* + --- ### Ticket #13 : [Backend] Adaptation MailService pour config dynamique @@ -267,6 +270,8 @@ Un seul panneau **Paramètres / Configuration** dans le dashboard admin, avec ** **Référence** : [21_CONFIGURATION-SYSTEME.md](./21_CONFIGURATION-SYSTEME.md#interface-admin) +*Issue Gitea #87 fermée en doublon de #14.* + --- ### Ticket #15 : [Frontend] Écran Paramètres (accès permanent) / Intégration panneau @@ -281,6 +286,8 @@ S’assurer que le panneau Paramètres (décrit en #14) est accessible en perman - [ ] Chargement des valeurs actuelles (GET `/configuration` ou par catégorie) - [ ] Modification et sauvegarde (PATCH bulk) sans appel à `setup/complete` +*Issue Gitea #88 fermée en doublon ; ce ticket (#15) est la référence.* + --- ### Ticket #16 : [Doc] Documentation configuration on-premise @@ -302,19 +309,8 @@ Rédiger la documentation pour aider les collectivités à configurer l'applicat --- -### Ticket #86 : [Backend] Guard Configuration Initiale (concept v1.3) -**Estimation** : 2h -**Labels** : `backend`, `p1-bloquant`, `on-premise` - -Issue Gitea ouverte pour le Guard aligné avec le concept v1.3 (pas de redirection vers `/admin/setup`, le frontend affiche le panneau Configuration et bloque la navigation). Voir aussi Ticket #12 (version fermée). - ---- - -### Ticket #88 : [Frontend] Intégration panneau Paramètres au dashboard -**Estimation** : 1h -**Labels** : `frontend`, `p1-bloquant`, `on-premise` - -Complément de #14 et #15 : s’assurer que le panneau Paramètres est accessible en permanence (onglet Configuration, chargement des valeurs, sauvegarde PATCH bulk sans `setup/complete`). +### Ticket #86 / #88 : Doublons fermés +*#86* fermé en doublon de **#12** (Guard). *#88* fermé en doublon de **#15** (Intégration panneau). Voir les tickets #12, #14 et #15 pour le travail à faire. --- @@ -898,6 +894,30 @@ Créer l'écran de gestion des documents légaux (CGU/Privacy) pour l'admin. --- +### Ticket #92 : [Frontend] Dashboard Admin - Données réelles et branchement API +**Estimation** : 8h +**Labels** : `frontend`, `p3`, `admin` + +**Description** : +Le dashboard admin (onglets Gestionnaires | Parents | Assistantes maternelles | Administrateurs) affiche actuellement des données en dur (mock). Remplacer par des appels API pour afficher les vrais utilisateurs et permettre les actions de gestion (voir, modifier, valider/refuser). Référence : [90_AUDIT.md](./90_AUDIT.md). + +**Fichiers concernés** : +- `gestionnaire_management_widget.dart` — liste actuellement 5 cartes "Dupont" en dur +- `parent_managmant_widget.dart` — 2 parents simulés +- `assistante_maternelle_management_widget.dart` — 2 AM simulées + +**Tâches** : +- [ ] S'assurer que les endpoints backend existent (liste users par rôle) +- [ ] Onglet Gestionnaires : appel API, affichage dynamique, recherche, lien "Créer gestionnaire" +- [ ] Onglet Parents : appel API, affichage dynamique, recherche/filtres, actions Voir/Modifier/Valider/Refuser +- [ ] Onglet Assistantes maternelles : appel API, affichage dynamique, filtres, actions +- [ ] Onglet Administrateurs : liste ou placeholder documenté +- [ ] Gestion états (chargement, erreur, liste vide) et rafraîchissement après actions + +**Références** : #44, #45, #46 (dashboard Gestionnaire), #25, #26 (API liste/validation), #17, #35 (création gestionnaire) + +--- + ### Ticket #50 : [Frontend] Affichage dynamique CGU lors inscription **Estimation** : 2h **Labels** : `frontend`, `p3`, `juridique` @@ -1237,7 +1257,7 @@ Rédiger les documents légaux génériques (CGU et Politique de confidentialit - **Juridique** : 1 ticket ### Modifications par rapport à la version initiale -- ✅ **v1.4** : Numéros de section du doc = numéros Gitea (Ticket #n = issue #n). Tableau et sections renumérotés en conséquence ; #87 fermé (doublon de #14). +- ✅ **v1.4** : Numéros de section du doc = numéros Gitea (Ticket #n = issue #n). Tableau et sections renumérotés. Doublons #86, #87, #88 fermés sur Gitea (#86→#12, #87→#14, #88→#15) ; tickets sources #12, #14, #15 mis à jour (doc + body Gitea). - ✅ **Concept v1.3** : Configuration initiale = un seul panneau Paramètres (3 sections) dans le dashboard ; plus de page dédiée « Setup Wizard » ; navigation bloquée jusqu’à sauvegarde au premier déploiement. Tickets #10, #12, #13 alignés. - ❌ **Supprimé** : Tickets "Renvoyer email validation" (backend + frontend) - Pas prioritaire - ✅ **Ajouté** : Ticket #55 "Service Logging Winston" - Monitoring essentiel diff --git a/docs/PROCEDURE-API-GITEA.md b/docs/PROCEDURE-API-GITEA.md new file mode 100644 index 0000000..6a41046 --- /dev/null +++ b/docs/PROCEDURE-API-GITEA.md @@ -0,0 +1,176 @@ +# Procédure – Utilisation de l’API Gitea + +## 1. Contexte + +- **Instance** : https://git.ptits-pas.fr +- **API de base** : `https://git.ptits-pas.fr/api/v1` +- **Projet P'titsPas** : dépôt `jmartin/petitspas` (owner = `jmartin`, repo = `petitspas`) + +## 2. Authentification + +### 2.1 Token + +Le token est défini dans l’environnement (ex. `~/.bashrc`) : + +```bash +export GITEA_TOKEN="" +``` + +Pour l’utiliser dans les commandes : + +```bash +source ~/.bashrc # ou : . ~/.bashrc +# Puis utiliser $GITEA_TOKEN dans les curl +``` + +### 2.2 En-tête HTTP + +Toutes les requêtes API doivent envoyer le token : + +```bash +-H "Authorization: token $GITEA_TOKEN" +``` + +Exemple : + +```bash +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas" +``` + +## 3. Endpoints utiles + +### 3.1 Dépôt (repository) + +| Action | Méthode | URL | +|---------------|---------|-----| +| Infos dépôt | GET | `/repos/{owner}/{repo}` | +| Liste dépôts | GET | `/repos/search?q=petitspas` | + +Exemple – infos du dépôt : + +```bash +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas" | jq . +``` + +### 3.2 Issues (tickets) + +| Action | Méthode | URL | +|------------------|---------|-----| +| Liste des issues | GET | `/repos/{owner}/{repo}/issues` | +| Détail d’une issue | GET | `/repos/{owner}/{repo}/issues/{index}` | +| Créer une issue | POST | `/repos/{owner}/{repo}/issues` | +| Modifier une issue | PATCH | `/repos/{owner}/{repo}/issues/{index}` | +| Fermer une issue | PATCH | (même URL, `state: "closed"`) | + +**Paramètres GET utiles pour la liste :** + +- `state` : `open` ou `closed` +- `labels` : filtre par label (ex. `frontend`) +- `page`, `limit` : pagination + +Exemples : + +```bash +# Toutes les issues ouvertes +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues?state=open" | jq . + +# Issues ouvertes avec label "frontend" +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues?state=open" | \ + jq '.[] | select(.labels[].name == "frontend") | {number, title, state}' + +# Détail de l’issue #47 +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/47" | jq . + +# Fermer l’issue #31 +curl -s -X PATCH -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"state":"closed"}' \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/31" + +# Créer une issue +curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"title":"Titre du ticket","body":"Description","labels":[1]}' \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues" +``` + +### 3.3 Pull requests + +| Action | Méthode | URL | +|---------------|---------|-----| +| Liste des PR | GET | `/repos/{owner}/{repo}/pulls` | +| Détail d’une PR | GET | `/repos/{owner}/{repo}/pulls/{index}` | +| Créer une PR | POST | `/repos/{owner}/{repo}/pulls` | +| Fusionner une PR | POST | `/repos/{owner}/{repo}/pulls/{index}/merge` | + +Exemples : + +```bash +# Liste des PR ouvertes +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls?state=open" | jq . + +# Créer une PR (head = branche source, base = branche cible) +curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"head":"develop","base":"master","title":"Titre de la PR"}' \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls" +``` + +### 3.4 Branches + +| Action | Méthode | URL | +|---------------|---------|-----| +| Liste des branches | GET | `/repos/{owner}/{repo}/branches` | + +```bash +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/branches" | jq '.[].name' +``` + +### 3.5 Webhooks + +| Action | Méthode | URL | +|---------------|---------|-----| +| Liste webhooks | GET | `/repos/{owner}/{repo}/hooks` | +| Créer webhook | POST | `/repos/{owner}/{repo}/hooks` | + +### 3.6 Labels + +| Action | Méthode | URL | +|---------------|---------|-----| +| Liste des labels | GET | `/repos/{owner}/{repo}/labels` | + +```bash +curl -s -H "Authorization: token $GITEA_TOKEN" \ + "https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/labels" | jq '.[] | {id, name}' +``` + +## 4. Résumé des URLs pour P'titsPas + +Remplacer `{owner}` par `jmartin` et `{repo}` par `petitspas` : + +| Ressource | URL | +|------------------|-----| +| Dépôt | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas` | +| Issues | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues` | +| Issue #n | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/issues/{n}` | +| Pull requests | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/pulls` | +| Branches | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/branches` | +| Labels | `https://git.ptits-pas.fr/api/v1/repos/jmartin/petitspas/labels` | + +## 5. Documentation officielle + +- Swagger / OpenAPI : https://docs.gitea.com/api +- Référence selon la version de Gitea installée (ex. 1.21, 1.25). + +## 6. Dépannage + +- **401 Unauthorized** : vérifier le token et l’en-tête `Authorization: token `. +- **404** : vérifier owner/repo et l’URL (sensible à la casse). +- **422 / body invalide** : pour POST/PATCH, envoyer `Content-Type: application/json` et un JSON valide. diff --git a/docs/STATUS-APPLICATION.md b/docs/STATUS-APPLICATION.md new file mode 100644 index 0000000..83461d0 --- /dev/null +++ b/docs/STATUS-APPLICATION.md @@ -0,0 +1,115 @@ +# Statut de l'application P'titsPas + +**Date du point** : 8 février 2026 + +--- + +## 1. Environnement de production + +| Élément | Statut | Détail | +|--------|--------|--------| +| **URL** | OK | https://app.ptits-pas.fr | +| **Frontend** | 200 | Flutter Web, Nginx | +| **API** | 200 | NestJS, préfixe `/api/v1` | +| **Base de données** | OK | PostgreSQL 17 | +| **PgAdmin** | OK | https://app.ptits-pas.fr/pgadmin | + +### Conteneurs Docker + +| Service | Image | État | +|---------|--------|------| +| ptitspas-frontend | ptitspas-app-frontend | Up (recréé récemment) | +| ptitspas-backend | ptitspas-app-backend | Up ~26h | +| ptitspas-postgres | postgres:17 | Up ~28h | +| ptitspas-pgadmin | dpage/pgadmin4 | Up ~28h | + +--- + +## 2. Dépôt Git + +- **Branche déployée** : `master` +- **Derniers commits** : + - `10bf255` – fix(ui): renforcer ombre boutons Parents/AM sur mobile + - `678f421` – docs: ticket #82 fermé (écran Login mobile) + - `5295e8e` – Merge develop: login mobile, formulaire sous slogan par ratio + - `6bf0932` – docs: Index, doc API Gitea, script fermeture issue + - `2f1740b` – docs: ticket #83 RegisterChoiceScreen Mobile (terminé) + +- **Branches actives** : `master`, `develop`, diverses `feature/*` (inscription, config, documents légaux, etc.) + +--- + +## 3. Déploiement (hook Gitea) + +| Élément | Statut | +|--------|--------| +| **Webhook** | Opérationnel (`hooks.ptits-pas.fr/hooks/petitspas-deploy`) | +| **Déclencheur** | Push sur `master`, dépôt `petitspas` | +| **Script** | Monté depuis l’hôte (verrou + sans Prisma) | +| **Dernier déploiement** | 08/02/2026 18:18:26 – Succès | + +Un seul déploiement à la fois (verrou) ; plus d’étape Prisma dans le script. + +--- + +## 4. Fonctionnalités livrées + +### Backend (API) + +- Auth : login, refresh, profil, **changement MDP obligatoire** (first login) +- Configuration : setup status, bulk, test SMTP, catégories +- Documents légaux : actifs, versions, upload, activation, téléchargement +- Inscription : parents (workflow complet), enfants (CRUD) +- Compte super_admin par défaut (seed BDD) : `admin@ptits-pas.fr` / `4dm1n1strateur` + +### Frontend + +- **Formulaires d’inscription** : compatibles **desktop et mobile** + - Choix d’inscription (Parents / Assistante maternelle) – responsive + - Inscription Parent : étapes 1 à 5 (infos parent 1 & 2, enfants, présentation, CGU, récap) + - Inscription AM : étapes 1 à 4 (identité, pro, présentation, récap) +- **Login** : écran adapté mobile (formulaire sous slogan selon ratio) +- Modale **changement de mot de passe obligatoire** après première connexion si `changement_mdp_obligatoire` +- CORS configuré (localhost + prod) + +### Base de données + +- Schéma database-first (BDD.sql) +- Tables : utilisateurs, configuration, documents_legaux, acceptations_documents, enfants, etc. +- Champs tokens création MDP, genre enfants, configuration système + +--- + +## 5. Tickets / Priorités (résumé) + +- **Liste détaillée** : `docs/23_LISTE-TICKETS.md` +- **Récent fermé** : #82 (Login mobile), #83 (RegisterChoiceScreen mobile), #73, #78, #79, #81 +- **P0 (BDD)** : quelques amendements ouverts (champs CDC, présentation dossier, etc.) +- **P1** : configuration système (panneau Paramètres, 3 sections, première config + accès permanent) +- **P2/P3** : backend métier et frontend (dashboards, écrans création MDP, etc.) + +--- + +## 6. Documentation utile + +| Fichier | Usage | +|---------|--------| +| `00_INDEX.md` | Index de la doc | +| `01_CAHIER-DES-CHARGES.md` | CDC v1.3 | +| `11_API.md` | Endpoints API | +| `20_WORKFLOW-CREATION-COMPTE.md` | Workflow création compte | +| `23_LISTE-TICKETS.md` | Liste des tickets | +| `BRIEFING-FRONTEND.md` | Brief frontend, accès Git, tickets prioritaires | +| `PROCEDURE-API-GITEA.md` | Utilisation API Gitea (issues, PR, token) | + +--- + +## 7. Synthèse + +L’application est **en production** sur https://app.ptits-pas.fr avec : + +- Frontend et API accessibles et répondant en 200. +- Déploiement automatique sur push `master` avec script à jour (verrou, sans Prisma). +- Formulaires d’inscription (Parents et AM) **responsive desktop et mobile**. +- Login et changement de mot de passe obligatoire opérationnels. +- Prochaines priorités : P0 BDD si besoin, P1 panneau Paramètres / Configuration (tickets #12, #13), puis dashboards et workflows métier (P2/P3).