# Routes API CRUD — Plan d'implémentation initial

## Vue d'ensemble
Ce document décrit les endpoints CRUD à implémenter pour la phase initiale de l'API backend RH.

### État actuel
- ✅ GET /api/employes (liste)
- ✅ GET /api/employes/{cos} (détail)
- ✅ GET /api/contrats (liste)
- ✅ GET /api/contrats/{id} (détail)
- ✅ POST /api/employes (création)
- ✅ PUT /api/employes/{cos} (modification)
- ✅ DELETE /api/employes/{cos} (suppression)
- ✅ POST /api/contrats (création)
- ✅ PUT /api/contrats/{id} (modification)
- ✅ DELETE /api/contrats/{id} (suppression)
- ✅ GET /api/absences (liste)
- ✅ GET /api/absences/{id} (détail)
- ✅ POST /api/absences (création)
- ✅ PUT /api/absences/{id} (modification)
- ✅ DELETE /api/absences/{id} (suppression)
- ✅ GET /api/diplomes (liste)
- ✅ GET /api/diplomes/{id} (détail)
- ✅ POST /api/diplomes (création)
- ✅ PUT /api/diplomes/{id} (modification)
- ✅ DELETE /api/diplomes/{id} (suppression)
- ✅ GET /api/visites-medicales (liste)
- ✅ GET /api/visites-medicales/{id} (détail)
- ✅ POST /api/visites-medicales (création)
- ✅ PUT /api/visites-medicales/{id} (modification)
- ✅ DELETE /api/visites-medicales/{id} (suppression)
- ✅ GET /api/types-absence (lecture seule)
- ✅ GET /api/types-diplome (lecture seule)
- ✅ GET /api/types-contrat (lecture seule)
- ✅ GET /api/types-cs (lecture seule)
- ✅ GET /api/types-avenants (lecture seule)
- ✅ GET /api/classifications (lecture seule)
- ✅ GET /api/postes (lecture seule)
- ✅ GET /api/etablissements (lecture seule)
- ✅ GET /api/secteurs (lecture seule)
---

## Phase 1 : CRUD des entités métier principales

### Employes (Salariés)
**Clé métier :** `COS` (Compte d'Ordre Social)

| Méthode | Endpoint | Statut | Notes |
|---------|----------|--------|-------|
| GET | /api/employes | ✅ | Liste avec pagination |
| GET | /api/employes/{cos} | ✅ | Détails complets employé |
| POST | /api/employes | ✅ | Créer employé |
| PUT | /api/employes/{cos} | ✅ | Modifier employé |
| DELETE | /api/employes/{cos} | ✅ | Supprimer employé |

### Contrats
**Clé métier :** `id` (ou `ID_Contrat`)

| Méthode | Endpoint | Statut | Notes |
|---------|----------|--------|-------|
| GET | /api/contrats | ✅ | Liste avec pagination |
| GET | /api/contrats/{id} | ✅ | Détails complets contrat |
| POST | /api/contrats | ✅  | Créer contrat |
| PUT | /api/contrats/{id} | ✅  | Modifier contrat |
| DELETE | /api/contrats/{id} | ✅ | Supprimer contrat |

### Absences
**Clé métier :** `id`

| Méthode | Endpoint | Statut | Notes |
|---------|----------|--------|-------|
| GET | /api/absences | ✅ | Liste avec pagination |
| GET | /api/absences/{id} | ✅ | Détails complets absence |
| POST | /api/absences | ✅ | Créer absence |
| PUT | /api/absences/{id} | ✅ | Modifier absence |
| DELETE | /api/absences/{id} | ✅ | Supprimer absence |

### Diplômes
**Clé métier :** `id`

| Méthode | Endpoint | Statut | Notes |
|---------|----------|--------|-------|
| GET | /api/diplomes | ✅ | Liste avec pagination |
| GET | /api/diplomes/{id} | ✅ | Détails complets diplôme |
| POST | /api/diplomes | ✅ | Créer diplôme |
| PUT | /api/diplomes/{id} | ✅ | Modifier diplôme |
| DELETE | /api/diplomes/{id} | ✅ | Supprimer diplôme |

### Visites Médicales
**Clé métier :** `id`

| Méthode | Endpoint | Statut | Notes |
|---------|----------|--------|-------|
| GET | /api/visites-medicales | ✅ | Liste avec pagination |
| GET | /api/visites-medicales/{id} | ✅ | Détails complets visite |
| POST | /api/visites-medicales | ✅ | Créer visite |
| PUT | /api/visites-medicales/{id} | ✅ | Modifier visite |
| DELETE | /api/visites-medicales/{id} | ✅ | Supprimer visite |

---

## Phase 2 : Données de référence (Lecture seule)

Tables de lookup / dropdowns :
- ✅ GET /api/types-absence (types d'absence)
- ✅ GET /api/types-diplome (types de diplôme)
- ✅ GET /api/types-contrat (types de contrat)
- ✅ GET /api/types-cs (types CS)
- ✅ GET /api/types-avenants (types d'avenants)
- ✅ GET /api/classifications (classifications professionnelles)
- ✅ GET /api/postes (postes)
- ✅ GET /api/etablissements (établissements/sites)
- ✅ GET /api/secteurs (secteurs)

---

## Phase 3 : Données liées et agrégats

### Avenants (Avenants de contrat)
- ✅ GET /api/contrats/{id}/avenants (avenants d'un contrat)
- ✅ GET /api/avenants (tous les avenants)
- ✅ POST /api/avenants

### Sanctions et Disciplinaire
- ✅ GET /api/employes/{cos}/sanctions
- ✅ GET /api/employes/{cos}/disciplinaires

---

## Notes d'implémentation

### Architecture
Chaque endpoint CRUD suit :
1. **Validateur** (`validators/{entity}.ts`) — Schéma Zod pour paramètres query/body
2. **Type** (`types/{entity}.ts`) — Types TypeScript pour réponses
3. **Service** (`services/{entity}.service.ts`) — Couche base de données (requêtes Prisma)
4. **Serveur** (`server/{entity}.server.ts`) — Couche orchestration
5. **Route** (`app/api/{entity}/route.ts` et `app/api/{entity}/[id]/route.ts`) — Handler HTTP

### Validation POST/PUT
- Utiliser Zod pour schémas de corps de requête
- Considérer les champs obligatoires, types et contraintes
- Retourner 400 avec détails d'erreur en cas d'échec de validation

### Gestion des erreurs
- 400 : Paramètres invalides ou validation échouée
- 404 : Ressource non trouvée
- 409 : Conflit (ex: clé unique dupliquée)
- 500 : Erreur serveur

### Pagination
- Les endpoints de liste acceptent `limit` (1-100, défaut 20) et `offset` (≥0, défaut 0)
- Réponse : `{ message, items: [], count: number }`

---

## Prochaines étapes
1. **Middleware d'authentification** — Protéger les routes avec JWT
2. **Wrapper gestion erreurs** — Centraliser les réponses d'erreur
3. **Tests & CI** — Ajouter tests d'intégration pour les endpoints critiques et configurer pipeline CI
