diff --git a/README.md b/README.md index b0b0090..d33f376 100644 --- a/README.md +++ b/README.md @@ -1 +1,169 @@ # api.konstitisyon.la + +Backend Directus pour konstitisyon.la, une plateforme de rédaction constitutionnelle collaborative. Ce dépôt contient la configuration Directus et le schéma de la base de données. + +## Architecture + +### Technologies +- **Backend**: Directus 11.x +- **Base de données**: SQLite +- **Authentification**: JWT via Directus + +### Structure du projet +``` +api.konstitisyon.la/ +├── extensions/ # Extensions Directus personnalisées +├── uploads/ # Fichiers uploadés +├── data.db # Base de données SQLite +└── .env # Configuration de l'environnement +``` + +## Modèle de données + +### Schéma de la base de données +```mermaid +erDiagram + TITRES ||--o{ ARTICLES : contient + TITRES ||--o{ COMMENTAIRES : discute + TITRES { + uuid id PK + string status + uuid user_created FK + datetime date_created + text contenu + integer numero + } + ARTICLES { + uuid id PK + string status + uuid user_created FK + datetime date_created + text contenu + integer numero + uuid titre FK + } + COMMENTAIRES { + uuid id PK + string status + uuid user_created FK + datetime date_created + text contenu + uuid titre FK + } + VOTES { + uuid id PK + uuid user_created FK + datetime date_created + datetime date_updated + uuid content_version_id FK + integer vote + } + DIRECTUS_VERSIONS ||--o{ VOTES : evalue + DIRECTUS_USERS ||--o{ VOTES : cree + DIRECTUS_USERS ||--o{ COMMENTAIRES : ecrit + DIRECTUS_USERS ||--o{ ARTICLES : redige + DIRECTUS_USERS ||--o{ TITRES : redige +``` + +### Collections Directus + +#### Collections principales +- **Titres** + - Sections principales de la constitution + - Numérotés et versionnés + - Champs : numero, contenu, status + +- **Articles** + - Contenus détaillés sous chaque titre + - Liés à un titre parent + - Champs : numero, contenu, titre (FK), status + +#### Collections participatives +- **Commentaires** + - Discussions sur les titres + - Liés à un titre spécifique + - Champs : contenu, titre (FK), user_created + +- **Votes** + - Évaluation des versions de contenu + - Valeurs : +1 ou -1 + - Champs : content_version_id (FK), vote, user_created + +## Installation + +### Prérequis +- Node.js 16+ +- npm ou yarn +- SQLite 3 + +### Configuration +Copier le fichier `.env.sample` vers un fichier `.env` : + +```bash +cp .env.sample .env +``` + +### Démarrage + +```bash +# Installation des dépendances +npm install + +# Démarrage du serveur +npx directus start +``` + +## API + +### Points d'entrée principaux + +#### Titres +- `GET /items/titres` : Liste des titres +- `GET /items/titres/:id` : Détails d'un titre +- `POST /items/titres` : Créer un titre +- `PATCH /items/titres/:id` : Modifier un titre + +#### Articles +- `GET /items/articles` : Liste des articles +- `GET /items/articles/:id` : Détails d'un article +- `POST /items/articles` : Créer un article +- `PATCH /items/articles/:id` : Modifier un article + +#### Commentaires +- `GET /items/commentaires` : Liste des commentaires +- `GET /items/commentaires/:id` : Détails d'un commentaire +- `POST /items/commentaires` : Créer un commentaire + +#### Votes +- `GET /items/votes` : Liste des votes +- `GET /items/votes/:id` : Détails d'un vote +- `POST /items/votes` : Créer un vote +- `PATCH /items/votes/:id` : Modifier un vote + +### Authentification + +- `POST /auth/login` : Connexion utilisateur +- `POST /auth/refresh` : Rafraîchissement du token +- `POST /auth/logout` : Déconnexion + +### Base de données + +Le projet utilise une base de données SQLite. Un fichier `data.sample.db` est fourni avec : +- La structure complète de la base de données +- Un compte administrateur par défaut : + - Email : admin@example.com + - Mot de passe : admin + +Pour démarrer un nouveau projet : +1. Copier `data.sample.db` vers `data.db` + - `cp data.sample.db data.db` +2. Mettre à jour le fichier `.env` pour pointer vers `data.db` +3. Démarrer le serveur + +## License + +Ce projet est sous licence AGPL-3. Cette licence garantit que le code reste libre et que toute modification doit être partagée avec la communauté. Voir le fichier `LICENSE` pour plus de détails. + +## Contact + +Pour toute question ou suggestion concernant le projet, n'hésitez pas à ouvrir une issue sur Codeberg.