Sprint 1 : scaffolding complet de Glibredecision
Plateforme de decisions collectives pour Duniter/G1. Backend FastAPI async + PostgreSQL (14 tables, 8 routers, 6 services, moteur de vote avec formule d'inertie WoT/Smith/TechComm). Frontend Nuxt 4 + Nuxt UI v3 + Pinia (9 pages, 5 stores). Infrastructure Docker + Woodpecker CI + Traefik. Documentation technique et utilisateur (15 fichiers). Seed : Licence G1, Engagement Forgeron v2.0.0, 4 protocoles de vote. 30 tests unitaires (formules, mode params, vote nuance) -- tous verts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
106
docs/content/dev/3.api-reference.md
Normal file
106
docs/content/dev/3.api-reference.md
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Reference API
|
||||
description: Liste des endpoints de l'API Glibredecision
|
||||
---
|
||||
|
||||
# Reference API
|
||||
|
||||
Tous les endpoints sont prefixes par `/api/v1`. L'API est auto-documentee via OpenAPI/Swagger a l'adresse `/docs` en mode debug.
|
||||
|
||||
## Authentification (`/api/v1/auth`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | ------------- | ----------------------------------------------------- | ---- |
|
||||
| POST | `/challenge` | Generer un challenge Ed25519 pour une adresse Duniter | Non |
|
||||
| POST | `/verify` | Verifier la signature du challenge et obtenir un token | Non |
|
||||
| GET | `/me` | Retourner l'identite authentifiee courante | Oui |
|
||||
| POST | `/logout` | Invalider la session courante | Oui |
|
||||
|
||||
## Documents (`/api/v1/documents`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | -------------------------------------- | ---------------------------------------- | ---- |
|
||||
| GET | `/` | Lister les documents (filtres: doc_type, status) | Non |
|
||||
| POST | `/` | Creer un nouveau document | Oui |
|
||||
| GET | `/{slug}` | Obtenir un document par son slug | Non |
|
||||
| PUT | `/{slug}` | Mettre a jour un document | Oui |
|
||||
| POST | `/{slug}/items` | Ajouter un item au document | Oui |
|
||||
| GET | `/{slug}/items` | Lister les items d'un document | Non |
|
||||
| GET | `/{slug}/items/{item_id}` | Obtenir un item avec son historique | Non |
|
||||
| POST | `/{slug}/items/{item_id}/versions` | Proposer une nouvelle version d'un item | Oui |
|
||||
|
||||
## Decisions (`/api/v1/decisions`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | ---------------- | ------------------------------------------------ | ---- |
|
||||
| GET | `/` | Lister les decisions (filtres: decision_type, status) | Non |
|
||||
| POST | `/` | Creer une nouvelle decision | Oui |
|
||||
| GET | `/{id}` | Obtenir une decision avec ses etapes | Non |
|
||||
| PUT | `/{id}` | Mettre a jour une decision | Oui |
|
||||
| POST | `/{id}/steps` | Ajouter une etape a une decision | Oui |
|
||||
|
||||
## Votes (`/api/v1/votes`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | --------------------------- | -------------------------------------------- | ---- |
|
||||
| POST | `/sessions` | Creer une session de vote | Oui |
|
||||
| GET | `/sessions/{id}` | Obtenir une session de vote | Non |
|
||||
| POST | `/sessions/{id}/vote` | Soumettre un vote (signe) | Oui |
|
||||
| GET | `/sessions/{id}/votes` | Lister les votes d'une session | Non |
|
||||
| GET | `/sessions/{id}/result` | Calculer et retourner le resultat courant | Non |
|
||||
|
||||
## Mandats (`/api/v1/mandates`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | ----------------- | ---------------------------------------------- | ---- |
|
||||
| GET | `/` | Lister les mandats (filtres: mandate_type, status) | Non |
|
||||
| POST | `/` | Creer un nouveau mandat | Oui |
|
||||
| GET | `/{id}` | Obtenir un mandat avec ses etapes | Non |
|
||||
| PUT | `/{id}` | Mettre a jour un mandat | Oui |
|
||||
| DELETE | `/{id}` | Supprimer un mandat (brouillon uniquement) | Oui |
|
||||
| POST | `/{id}/steps` | Ajouter une etape a un mandat | Oui |
|
||||
| GET | `/{id}/steps` | Lister les etapes d'un mandat | Non |
|
||||
|
||||
## Protocoles (`/api/v1/protocols`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | --------------- | -------------------------------------------------- | ---- |
|
||||
| GET | `/` | Lister les protocoles de vote | Non |
|
||||
| POST | `/` | Creer un protocole de vote | Oui |
|
||||
| GET | `/{id}` | Obtenir un protocole avec sa configuration formule | Non |
|
||||
| GET | `/formulas` | Lister les configurations de formules | Non |
|
||||
| POST | `/formulas` | Creer une configuration de formule | Oui |
|
||||
|
||||
## Sanctuaire (`/api/v1/sanctuary`)
|
||||
|
||||
| Methode | Endpoint | Description | Auth |
|
||||
| ------- | --------- | ---------------------------------------------------------- | ---- |
|
||||
| GET | `/` | Lister les entrees du sanctuaire (filtre: entry_type) | Non |
|
||||
| GET | `/{id}` | Obtenir une entree du sanctuaire | Non |
|
||||
| POST | `/` | Creer une entree (hash SHA-256, CID IPFS, TX on-chain) | Oui |
|
||||
|
||||
## WebSocket (`/api/v1/ws`)
|
||||
|
||||
| Endpoint | Description |
|
||||
| --------- | -------------------------------------------------------- |
|
||||
| `/ws` | Connexion WebSocket pour notifications temps reel (votes, decisions) |
|
||||
|
||||
## Sante
|
||||
|
||||
| Methode | Endpoint | Description |
|
||||
| ------- | -------------- | -------------------------- |
|
||||
| GET | `/api/health` | Verification de sante (hors versionning) |
|
||||
|
||||
## Pagination
|
||||
|
||||
Les endpoints de liste acceptent les parametres `skip` (offset, defaut 0) et `limit` (max 200, defaut 50).
|
||||
|
||||
## Authentification
|
||||
|
||||
Les endpoints marques "Oui" dans la colonne Auth requierent un header :
|
||||
|
||||
```
|
||||
Authorization: Bearer <token>
|
||||
```
|
||||
|
||||
Le token est obtenu via le flux challenge-response (`/auth/challenge` puis `/auth/verify`).
|
||||
Reference in New Issue
Block a user