merge(master): intégration develop — ticket #50, documents légaux et validation CGU
Squash merge de la branche develop dans master : un seul commit sur master pour regrouper la livraison liée au ticket #50 (affichage dynamique des CGU et de la politique de confidentialité à l'inscription) ainsi que la documentation et les ajustements associés. Frontend (P'titsPas) : modale de validation bloquante avec onglets CGU / confidentialité, chargement des PDF depuis l'API des documents légaux actifs, affichage via pdfx (PdfViewPinch et barre de progression latérale sur le web, repli PdfView sous Windows). Branchement dans le flux d'inscription (écran de présentation), enrichissement du UserService et correction des chemins média pour les URL absolues. Documentation: jeux de fichiers juridiques (markdown et PDF de référence), réorganisation (dossier docs/juridique, archives, renommage du briefing), mises à jour index, liste de tickets et décisions projet. Scripts et métadonnées mineures (Gitea, pubspec, index web). Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# Archive documentation · P'titsPas
|
||||
|
||||
Ce dossier regroupe les fichiers **sans préfixe numérique** à la racine de
|
||||
`docs/` qui ne sont plus des **références actives**, ou qui sont des
|
||||
**brouillons / temporaires**.
|
||||
|
||||
## Règle de nommage (racine `docs/`)
|
||||
|
||||
- Les documents **normatifs** à la racine portent un préfixe **`NN_`**
|
||||
(deux chiffres), ex. `23_LISTE-TICKETS.md`.
|
||||
- **Exceptions** (héritage ou outillage) listées dans
|
||||
[**00_INDEX.md**](../00_INDEX.md#exceptions-de-nommage) : charte, CDC
|
||||
historique, évolutions — **cible** : les renommer progressivement en `NN_`
|
||||
et mettre à jour `.cursorrules` / liens.
|
||||
|
||||
## Sous-dossiers ici
|
||||
|
||||
| Dossier | Usage |
|
||||
|---------|--------|
|
||||
| [**temporaires/**](./temporaires/) | Notes jetables, exports de travail.
|
||||
**Supprimables** quand la tâche associée est close. |
|
||||
| [**obsolete/**](./obsolete/) | Ancienne doc **remplacée** ou **doublon**
|
||||
(conservée un temps pour historique). **Supprimer** après bascule confirmée
|
||||
si plus aucune référence. |
|
||||
|
||||
## Hors `docs/` racine
|
||||
|
||||
Les dossiers thématiques (**`juridique/`**, **`test-data/`**, etc.) peuvent
|
||||
contenir des fichiers sans `NN_` : la règle `NN_` s’applique surtout aux
|
||||
fichiers **directement** sous `docs/`.
|
||||
@@ -0,0 +1,597 @@
|
||||
# Architecture Technique - P'titsPas
|
||||
|
||||
> **Archivé** (`docs/archive/obsolete/`) — non maintenu à la racine `docs/`.
|
||||
> Voir [`02_ARCHITECTURE.md`](../../02_ARCHITECTURE.md) pour la référence
|
||||
> courante.
|
||||
|
||||
## Guide d'Infrastructure et de Déploiement
|
||||
|
||||
---
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
P'titsPas est une application de gestion de garde d'enfants pour les collectivités locales, basée sur une architecture **client-serveur moderne** :
|
||||
|
||||
- **Frontend** : Application web Flutter (Single Page Application)
|
||||
- **Backend** : API REST Node.js/Express avec TypeScript
|
||||
- **Base de données** : PostgreSQL avec ORM Prisma
|
||||
- **Architecture** : Séparation claire frontend/backend avec API REST
|
||||
|
||||
---
|
||||
|
||||
## Prérequis Serveur
|
||||
|
||||
### Environnement d'exécution
|
||||
|
||||
#### Backend
|
||||
- **Node.js** : Version 18+ (LTS recommandée : 18.19.0+)
|
||||
- **npm** : Version 9+
|
||||
- **TypeScript** : Inclus dans les dépendances du projet
|
||||
|
||||
#### Base de données
|
||||
- **PostgreSQL** : Version 15+
|
||||
- **Extensions** : UUID (pour les clés primaires)
|
||||
|
||||
#### Frontend
|
||||
- **Serveur web statique** : nginx, Apache, ou similaire
|
||||
- **Flutter Web** : Compilation en JavaScript (pas de prérequis runtime)
|
||||
|
||||
### Ressources recommandées
|
||||
|
||||
#### Environnement de développement
|
||||
- **RAM** : 4GB minimum
|
||||
- **CPU** : 2 vCPU
|
||||
- **Storage** : 10GB
|
||||
|
||||
#### Environnement de production
|
||||
- **RAM** : 8GB recommandé (4GB minimum)
|
||||
- **CPU** : 4 vCPU recommandé (2 vCPU minimum)
|
||||
- **Storage** : 50GB minimum (base de données + logs + backups)
|
||||
- **Réseau** :
|
||||
- Port 3000 : API Backend (interne)
|
||||
- Port 80/443 : Web (externe)
|
||||
- Port 5432 : PostgreSQL (interne uniquement)
|
||||
|
||||
---
|
||||
|
||||
## Stack Technique Détaillée
|
||||
|
||||
### Backend (API)
|
||||
|
||||
```json
|
||||
{
|
||||
"runtime": "Node.js 18+",
|
||||
"language": "TypeScript",
|
||||
"framework": "Express.js 4.18+",
|
||||
"orm": "Prisma 6.7+",
|
||||
"database_client": "@prisma/client",
|
||||
"security": [
|
||||
"helmet (sécurité headers)",
|
||||
"cors (CORS policy)",
|
||||
"bcrypt (hashage mots de passe)",
|
||||
"jsonwebtoken (JWT auth)"
|
||||
],
|
||||
"logging": "morgan",
|
||||
"validation": "@nestjs/common"
|
||||
}
|
||||
```
|
||||
|
||||
### Frontend (Web)
|
||||
|
||||
```json
|
||||
{
|
||||
"framework": "Flutter 3.2.6+",
|
||||
"language": "Dart 3.0+",
|
||||
"compilation": "JavaScript (Flutter Web)",
|
||||
"navigation": "go_router 13.2+",
|
||||
"state_management": "provider 6.1+",
|
||||
"ui_framework": "Material Design",
|
||||
"fonts": "Google Fonts",
|
||||
"http_client": "http 1.2+"
|
||||
}
|
||||
```
|
||||
|
||||
### Base de données
|
||||
|
||||
```sql
|
||||
-- Structure PostgreSQL
|
||||
-- Tables principales :
|
||||
-- - Parent (utilisateurs parents)
|
||||
-- - Child (enfants)
|
||||
-- - Contract (contrats de garde)
|
||||
-- - Admin (administrateurs)
|
||||
-- - Theme (thèmes interface)
|
||||
-- - AppSettings (paramètres app)
|
||||
|
||||
-- Types de données :
|
||||
-- - UUID pour toutes les clés primaires
|
||||
-- - Timestamps automatiques (createdAt, updatedAt)
|
||||
-- - Enums pour les statuts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Installation et Configuration
|
||||
|
||||
### 1. Prérequis système
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt update
|
||||
sudo apt install -y nodejs npm postgresql postgresql-contrib nginx
|
||||
|
||||
# Vérification versions
|
||||
node --version # >= 18.0.0
|
||||
npm --version # >= 9.0.0
|
||||
psql --version # >= 15.0
|
||||
```
|
||||
|
||||
### 2. Configuration base de données
|
||||
|
||||
```sql
|
||||
-- Se connecter en tant que postgres
|
||||
sudo -u postgres psql
|
||||
|
||||
-- Créer la base de données et l'utilisateur
|
||||
CREATE DATABASE ptitspas;
|
||||
CREATE USER ptitspas_user WITH PASSWORD 'secure_password_here';
|
||||
GRANT ALL PRIVILEGES ON DATABASE ptitspas TO ptitspas_user;
|
||||
ALTER USER ptitspas_user CREATEDB; -- Pour les migrations
|
||||
|
||||
-- Quitter
|
||||
\q
|
||||
```
|
||||
|
||||
### 3. Installation Backend
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# Installation des dépendances
|
||||
npm install
|
||||
|
||||
# Configuration environnement
|
||||
cp .env.example .env
|
||||
# Éditer .env avec vos paramètres
|
||||
|
||||
# Génération du client Prisma et migrations
|
||||
npx prisma generate
|
||||
npx prisma migrate deploy
|
||||
|
||||
# Initialisation admin (optionnel)
|
||||
npm run init-admin
|
||||
```
|
||||
|
||||
### 4. Installation Frontend
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Installation des dépendances Flutter
|
||||
flutter pub get
|
||||
|
||||
# Build pour production
|
||||
flutter build web --release
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Variables d'Environnement
|
||||
|
||||
### Backend (.env)
|
||||
|
||||
```bash
|
||||
# Base de données
|
||||
DATABASE_URL="postgresql://ptitspas_user:secure_password_here@localhost:5432/ptitspas"
|
||||
|
||||
# Sécurité
|
||||
JWT_SECRET="your-super-secret-jwt-key-minimum-32-characters"
|
||||
JWT_EXPIRES_IN="24h"
|
||||
|
||||
# Serveur
|
||||
PORT=3000
|
||||
NODE_ENV=production
|
||||
|
||||
# Optionnel
|
||||
CORS_ORIGIN="https://ptitspas.yourdomain.com"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Déploiement
|
||||
|
||||
### Option 1 : Déploiement classique (recommandé)
|
||||
|
||||
#### Backend
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# Installation production
|
||||
npm ci --only=production
|
||||
|
||||
# Build TypeScript
|
||||
npm run build
|
||||
|
||||
# Démarrage (avec PM2 recommandé)
|
||||
npm install -g pm2
|
||||
pm2 start dist/index.js --name "ptitspas-api"
|
||||
pm2 startup
|
||||
pm2 save
|
||||
```
|
||||
|
||||
#### Frontend
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Build production
|
||||
flutter build web --release
|
||||
|
||||
# Copier vers serveur web
|
||||
sudo cp -r build/web/* /var/www/ptitspas/
|
||||
sudo chown -R www-data:www-data /var/www/ptitspas/
|
||||
```
|
||||
|
||||
### Option 2 : Conteneurisation Docker
|
||||
|
||||
#### Dockerfile Backend
|
||||
|
||||
```dockerfile
|
||||
FROM node:18-alpine
|
||||
|
||||
# Créer répertoire app
|
||||
WORKDIR /app
|
||||
|
||||
# Copier package files
|
||||
COPY package*.json ./
|
||||
COPY prisma ./prisma/
|
||||
|
||||
# Installer dépendances
|
||||
RUN npm ci --only=production
|
||||
|
||||
# Copier code source
|
||||
COPY . .
|
||||
|
||||
# Build
|
||||
RUN npm run build
|
||||
|
||||
# Générer client Prisma
|
||||
RUN npx prisma generate
|
||||
|
||||
# Exposer port
|
||||
EXPOSE 3000
|
||||
|
||||
# Variables d'environnement
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# Commande démarrage
|
||||
CMD ["npm", "start"]
|
||||
```
|
||||
|
||||
#### Dockerfile Frontend
|
||||
|
||||
```dockerfile
|
||||
FROM nginx:alpine
|
||||
|
||||
# Copier build Flutter
|
||||
COPY build/web /usr/share/nginx/html
|
||||
|
||||
# Configuration nginx
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# Exposer port
|
||||
EXPOSE 80
|
||||
|
||||
# Démarrage nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
```
|
||||
|
||||
#### Docker Compose
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
environment:
|
||||
POSTGRES_DB: ptitspas
|
||||
POSTGRES_USER: ptitspas_user
|
||||
POSTGRES_PASSWORD: secure_password_here
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "5432:5432"
|
||||
|
||||
backend:
|
||||
build: ./backend
|
||||
environment:
|
||||
DATABASE_URL: postgresql://ptitspas_user:secure_password_here@postgres:5432/ptitspas
|
||||
JWT_SECRET: your-super-secret-jwt-key
|
||||
NODE_ENV: production
|
||||
ports:
|
||||
- "3000:3000"
|
||||
depends_on:
|
||||
- postgres
|
||||
|
||||
frontend:
|
||||
build: ./frontend
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuration Nginx
|
||||
|
||||
### Configuration complète
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name ptitspas.yourdomain.com;
|
||||
|
||||
# Redirection HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name ptitspas.yourdomain.com;
|
||||
|
||||
# Certificats SSL
|
||||
ssl_certificate /etc/letsencrypt/live/ptitspas.yourdomain.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/ptitspas.yourdomain.com/privkey.pem;
|
||||
|
||||
# Configuration SSL sécurisée
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
# Frontend statique (Flutter Web)
|
||||
location / {
|
||||
root /var/www/ptitspas;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
# Cache statique
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
|
||||
# API Backend
|
||||
location /api/ {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
# Timeouts
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
# Logs
|
||||
access_log /var/log/nginx/ptitspas_access.log;
|
||||
error_log /var/log/nginx/ptitspas_error.log;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sécurité
|
||||
|
||||
### Obligatoire
|
||||
|
||||
1. **HTTPS avec certificat SSL**
|
||||
```bash
|
||||
# Installation Certbot
|
||||
sudo apt install certbot python3-certbot-nginx
|
||||
|
||||
# Génération certificat
|
||||
sudo certbot --nginx -d ptitspas.yourdomain.com
|
||||
|
||||
# Renouvellement automatique
|
||||
sudo crontab -e
|
||||
# Ajouter : 0 12 * * * /usr/bin/certbot renew --quiet
|
||||
```
|
||||
|
||||
2. **Firewall**
|
||||
```bash
|
||||
# UFW (Ubuntu)
|
||||
sudo ufw allow 22 # SSH
|
||||
sudo ufw allow 80 # HTTP
|
||||
sudo ufw allow 443 # HTTPS
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
3. **Base de données sécurisée**
|
||||
```bash
|
||||
# PostgreSQL : accès local uniquement
|
||||
sudo nano /etc/postgresql/15/main/postgresql.conf
|
||||
# Commenter : #listen_addresses = 'localhost'
|
||||
|
||||
sudo nano /etc/postgresql/15/main/pg_hba.conf
|
||||
# Vérifier que seules les connexions locales sont autorisées
|
||||
```
|
||||
|
||||
4. **Backup automatique**
|
||||
```bash
|
||||
# Script backup
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/var/backups/ptitspas"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
pg_dump -U ptitspas_user -h localhost ptitspas > $BACKUP_DIR/ptitspas_$DATE.sql
|
||||
|
||||
# Nettoyer les backups > 30 jours
|
||||
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
|
||||
|
||||
# Crontab : tous les jours à 2h
|
||||
# 0 2 * * * /path/to/backup_script.sh
|
||||
```
|
||||
|
||||
### Recommandé
|
||||
|
||||
1. **Fail2Ban** (protection brute force)
|
||||
```bash
|
||||
sudo apt install fail2ban
|
||||
sudo systemctl enable fail2ban
|
||||
```
|
||||
|
||||
2. **Monitoring des logs**
|
||||
```bash
|
||||
# Logrotate pour éviter les gros fichiers
|
||||
sudo nano /etc/logrotate.d/ptitspas
|
||||
```
|
||||
|
||||
3. **Updates automatiques**
|
||||
```bash
|
||||
sudo apt install unattended-upgrades
|
||||
sudo dpkg-reconfigure unattended-upgrades
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Commandes de Gestion
|
||||
|
||||
### Démarrage des services
|
||||
|
||||
```bash
|
||||
# Backend (développement)
|
||||
cd backend && npm run dev
|
||||
|
||||
# Backend (production avec PM2)
|
||||
pm2 start ptitspas-api
|
||||
pm2 status
|
||||
|
||||
# Base de données
|
||||
sudo systemctl start postgresql
|
||||
sudo systemctl status postgresql
|
||||
|
||||
# Serveur web
|
||||
sudo systemctl start nginx
|
||||
sudo systemctl status nginx
|
||||
```
|
||||
|
||||
### Maintenance
|
||||
|
||||
```bash
|
||||
# Migrations base de données
|
||||
cd backend
|
||||
npx prisma migrate deploy
|
||||
|
||||
# Logs Backend
|
||||
pm2 logs ptitspas-api
|
||||
|
||||
# Logs Nginx
|
||||
sudo tail -f /var/log/nginx/ptitspas_access.log
|
||||
sudo tail -f /var/log/nginx/ptitspas_error.log
|
||||
|
||||
# Restart services
|
||||
pm2 restart ptitspas-api
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Monitoring et Healthcheck
|
||||
|
||||
### Endpoints de santé
|
||||
|
||||
```bash
|
||||
# API Health (à implémenter)
|
||||
curl https://ptitspas.yourdomain.com/api/health
|
||||
|
||||
# Base de données
|
||||
psql -h localhost -U ptitspas_user -d ptitspas -c "SELECT 1;"
|
||||
|
||||
# Frontend
|
||||
curl -I https://ptitspas.yourdomain.com/
|
||||
```
|
||||
|
||||
### Logs à surveiller
|
||||
|
||||
1. **Backend** : Via PM2 ou logs applicatifs
|
||||
2. **PostgreSQL** : `/var/log/postgresql/postgresql-15-main.log`
|
||||
3. **Nginx** : `/var/log/nginx/ptitspas_*.log`
|
||||
4. **Système** : `/var/log/syslog`
|
||||
|
||||
### Métriques importantes
|
||||
|
||||
- **CPU/RAM** : Usage serveur
|
||||
- **Espace disque** : Base de données et logs
|
||||
- **Connexions DB** : Nombre de connexions actives
|
||||
- **Temps de réponse** : API et frontend
|
||||
- **Erreurs 5xx** : Erreurs serveur
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Problèmes courants
|
||||
|
||||
1. **Backend ne démarre pas**
|
||||
```bash
|
||||
# Vérifier variables d'environnement
|
||||
cd backend && cat .env
|
||||
|
||||
# Vérifier connexion DB
|
||||
npx prisma db pull
|
||||
|
||||
# Logs détaillés
|
||||
npm run dev
|
||||
```
|
||||
|
||||
2. **Frontend ne s'affiche pas**
|
||||
```bash
|
||||
# Vérifier build
|
||||
cd frontend && flutter build web
|
||||
|
||||
# Vérifier nginx
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
3. **Erreurs base de données**
|
||||
```bash
|
||||
# Vérifier statut PostgreSQL
|
||||
sudo systemctl status postgresql
|
||||
|
||||
# Vérifier connexions
|
||||
sudo -u postgres psql -c "SELECT * FROM pg_stat_activity;"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Évolutivité
|
||||
|
||||
### Optimisations possibles
|
||||
|
||||
1. **Cache Redis** : Pour les sessions et cache applicatif
|
||||
2. **CDN** : Pour les assets statiques
|
||||
3. **Load Balancer** : Pour haute disponibilité
|
||||
4. **Clustering** : Multiple instances Node.js
|
||||
5. **Database replication** : Master/Slave PostgreSQL
|
||||
|
||||
### Monitoring avancé
|
||||
|
||||
- **Prometheus + Grafana** : Métriques système et applicatif
|
||||
- **ELK Stack** : Centralisation des logs
|
||||
- **Uptime monitoring** : Surveillance externe
|
||||
|
||||
Cette architecture est conçue pour être **scalable**, **maintenable** et **sécurisée** pour un environnement de production professionnel.
|
||||
@@ -0,0 +1,180 @@
|
||||
# Procédure – Utilisation de l’API Gitea
|
||||
|
||||
> **Archivé** (`docs/archive/obsolete/`) — **doublon** de
|
||||
> [`26_GITEA-API.md`](../../26_GITEA-API.md). Ne pas modifier ici ; éditer le
|
||||
> fichier numéroté.
|
||||
|
||||
## 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="<votre_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 <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.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Obsolete
|
||||
|
||||
Ancienne documentation **déplacée** depuis `docs/` :
|
||||
|
||||
| Fichier | Motif |
|
||||
|---------|--------|
|
||||
| `PROCEDURE-API-GITEA.md` | Doublon fonctionnel de
|
||||
[**26_GITEA-API.md**](../../26_GITEA-API.md). |
|
||||
| `ARCHITECTURE_TECHNIQUE.md` | Non référencé ; la vue d’ensemble est dans
|
||||
[**02_ARCHITECTURE.md**](../../02_ARCHITECTURE.md). |
|
||||
| `STATUS-APPLICATION.md` | Instantané daté ; non tenu comme doc vivante. |
|
||||
|
||||
Après vérification qu’aucun lien externe ne pointe encore vers ces chemins, on
|
||||
peut **supprimer** ce sous-dossier ou ne garder que des pointeurs minimalistes.
|
||||
@@ -0,0 +1,118 @@
|
||||
# Statut de l'application P'titsPas
|
||||
|
||||
> **Archivé** (`docs/archive/obsolete/`) — instantané du **8 février 2026**, non
|
||||
> maintenu comme référence courante. Voir `docs/00_INDEX.md` pour la doc à jour.
|
||||
|
||||
**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 |
|
||||
| `27_BRIEFING-FRONTEND.md` | Brief frontend, accès Git, tickets prioritaires |
|
||||
| `26_GITEA-API.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).
|
||||
@@ -0,0 +1,36 @@
|
||||
# Archivé docs/archive/temporaires/ — export jetable, supprimer si inutile.
|
||||
Point tickets frontend (API Gitea) - 27/01/2026
|
||||
================================================
|
||||
|
||||
Issues avec label "frontend" : 20 (ouvertes: 12, fermees: 8)
|
||||
|
||||
Num | Etat | Titre
|
||||
----+--------+--------------------------------------------------------
|
||||
35 | open | [Frontend] Écran Création Gestionnaire
|
||||
36 | closed | [Frontend] Inscription Parent - Étape 1 (Parent 1)
|
||||
37 | closed | [Frontend] Inscription Parent - Étape 2 (Parent 2)
|
||||
38 | closed | [Frontend] Inscription Parent - Étape 3 (Enfants)
|
||||
39 | closed | [Frontend] Inscription Parent - Étapes 4-6 (Finalisatio
|
||||
40 | closed | [Frontend] Inscription AM - Panneau 1 (Identité)
|
||||
41 | closed | [Frontend] Inscription AM - Panneau 2 (Infos pro)
|
||||
42 | closed | [Frontend] Inscription AM - Finalisation
|
||||
43 | open | [Frontend] Écran Création Mot de Passe
|
||||
44 | closed | [Frontend] Dashboard Gestionnaire - Structure
|
||||
45 | open | [Frontend] Dashboard Gestionnaire - Liste Parents
|
||||
46 | open | [Frontend] Dashboard Gestionnaire - Liste AM
|
||||
47 | open | [Frontend] Écran Changement MDP Obligatoire
|
||||
48 | open | [Frontend] Gestion Erreurs & Messages
|
||||
49 | open | [Frontend] Écran Gestion Documents Légaux (Admin)
|
||||
50 | open | [Frontend] Affichage dynamique CGU lors inscription
|
||||
51 | open | [Frontend] Écran Logs Admin (optionnel v1.1)
|
||||
54 | open | [Tests] Tests E2E Frontend
|
||||
82 | closed | [Frontend] Adapter �cran Login pour mobile
|
||||
83 | closed | [Frontend] Adapter �cran Choix Inscription pour mobile
|
||||
|
||||
Suivi doc 23_LISTE-TICKETS (Gitea #73,78,79,81,82,83):
|
||||
#73 closed labels=[]
|
||||
#78 closed labels=[]
|
||||
#79 closed labels=[]
|
||||
#81 closed labels=[]
|
||||
#82 closed (écran Login mobile)
|
||||
#83 closed labels=['frontend', 'p3', 'phase-1', 'ux']
|
||||
@@ -0,0 +1,10 @@
|
||||
# Temporaires
|
||||
|
||||
Fichiers **non numérotés** de travail (brouillons, listes de tickets exportées,
|
||||
alignements UI en cours, etc.).
|
||||
|
||||
- Préfixe conseillé pour les nouveaux fichiers jetables : **`TEMP_`** ou
|
||||
**`WIP_`** dans ce dossier.
|
||||
- **Suppression** : dès que la fonctionnalité est livrée ou le sujet clos,
|
||||
supprimer le fichier (ou le déplacer vers `obsolete/` si une trace utile
|
||||
reste nécessaire).
|
||||
@@ -0,0 +1,46 @@
|
||||
# TEMP — Alignement front / API (inscription AM & validation gestionnaire)
|
||||
|
||||
> **Archivé** (`docs/archive/temporaires/`) — **fichier temporaire** ; à
|
||||
> **supprimer** une fois le front livré ou le sujet clos (voir
|
||||
> `docs/archive/temporaires/README.md`).
|
||||
|
||||
Ce document décrit les changements **côté API** et ce que **Flutter** doit faire pour rester aligné. Aucune modification front n’a été faite dans le chantier backend associé.
|
||||
|
||||
## 1. `POST /auth/register/am` — lieu de naissance obligatoire
|
||||
|
||||
- **`lieu_naissance_ville`** et **`lieu_naissance_pays`** sont **obligatoires** (non vides après trim, min. **2 caractères** chacun, max 100).
|
||||
- Réponses **400** si manquants ou invalides (messages class-validator).
|
||||
- **Action front** : champs obligatoires dans le parcours AM (étapes identité / naissance), validation UI avant envoi ; afficher les erreurs renvoyées par l’API.
|
||||
|
||||
## 2. Réponse `GET /dossiers/:numeroDossier` (type `am`)
|
||||
|
||||
Sous `dossier.user`, l’API peut inclure :
|
||||
|
||||
| Clé JSON | Description |
|
||||
|----------|-------------|
|
||||
| `date_naissance` | Date (si renseignée à l’inscription) |
|
||||
| `lieu_naissance_ville` | Ville de naissance |
|
||||
| `lieu_naissance_pays` | Pays de naissance |
|
||||
| `consentement_photo` | Booléen (exposé dans `dossier.user`) |
|
||||
|
||||
À la **racine** de `dossier` (objet AM), champs déjà renvoyés par le backend : `disponible`, `annees_experience`, `specialite`, `nb_max_enfants`, `place_disponible`, etc.
|
||||
|
||||
**Action front** :
|
||||
|
||||
- Étendre **`AppUser.fromJson` / `toJson`** (`lib/models/user.dart`) pour mapper `date_naissance`, `lieu_naissance_ville`, `lieu_naissance_pays`, `consentement_photo`.
|
||||
- Étendre **`DossierAM.fromJson`** (`lib/models/dossier_unifie.dart`) pour parser `disponible`, `annees_experience`, `specialite` à la racine du dossier (noms snake_case comme dans la réponse JSON Nest).
|
||||
|
||||
## 3. `ValidationAmWizard` (admin)
|
||||
|
||||
Afficher pour cohérence avec le formulaire d’inscription :
|
||||
|
||||
- **Informations personnelles** : date de naissance, ville / pays de naissance, consentement photo (Oui/Non).
|
||||
- **Informations professionnelles** : disponibilité, années d’expérience, spécialité (afficher « – » si `null`).
|
||||
|
||||
## 4. `place_disponible` à l’inscription
|
||||
|
||||
- Le backend initialise **`place_disponible`** sur la fiche AM à la **même valeur** que **`capacite_accueil`** à la création. Le wizard peut donc afficher une valeur cohérente avec la capacité sans champ séparé côté public.
|
||||
|
||||
---
|
||||
|
||||
*Dernière mise à jour : alignement backend branche `feature/120-inscription-am-photo-backend`.*
|
||||
Reference in New Issue
Block a user