docs: améliore la documentation avec le schéma de la base de données
- Ajoute un diagramme ERD en Mermaid montrant la structure de la BDD - Généralise la description du projet (non spécifique à Haïti) - Réorganise la section modèle de données - Clarifie les relations entre les entités
This commit is contained in:
@@ -1 +1,179 @@
|
||||
# konstitisyon.la
|
||||
# konstitisyon.la
|
||||
|
||||
Plateforme collaborative dédiée à la rédaction citoyenne d'une constitution. Ce projet vise à permettre aux citoyens de participer activement au processus de rédaction constitutionnelle à travers un système transparent et démocratique.
|
||||
|
||||
## Vision du projet
|
||||
|
||||
L'objectif de konstitisyon.la est de démocratiser le processus de rédaction constitutionnelle en :
|
||||
- Permettant à chaque citoyen de proposer des modifications
|
||||
- Facilitant le débat et la discussion autour des propositions
|
||||
- Assurant la transparence du processus de rédaction
|
||||
- Gardant une trace de l'évolution du texte
|
||||
- Permettant un vote démocratique sur les propositions
|
||||
|
||||
## Fonctionnalités principales
|
||||
|
||||
### Rédaction collaborative
|
||||
- Proposition de modifications du texte constitutionnel
|
||||
- Système de versionnage pour suivre l'évolution
|
||||
- Comparaison visuelle des différentes versions
|
||||
- Historique complet des modifications
|
||||
|
||||
### Participation citoyenne
|
||||
- Système de vote sur les propositions
|
||||
- Discussion et débat sur les modifications
|
||||
- Transparence totale du processus
|
||||
- Accessibilité pour tous les citoyens
|
||||
|
||||
### Gestion démocratique
|
||||
- Processus de validation communautaire
|
||||
- Système de vote (+1/-1) sur les propositions
|
||||
- Traçabilité des décisions
|
||||
|
||||
## Architecture technique
|
||||
|
||||
### Technologies
|
||||
- **Frontend**: Next.js 13+ avec App Router
|
||||
- **UI**: Material-UI (MUI)
|
||||
- **Backend**: Directus (Headless CMS)
|
||||
- **Authentification**: NextAuth.js
|
||||
- **Base de données**: SQLite (via Directus)
|
||||
|
||||
### Structure du projet
|
||||
```
|
||||
konstitisyon.la/
|
||||
├── app/ # Routes et pages Next.js
|
||||
├── components/
|
||||
│ ├── konstitisyon/ # Composants liés à la constitution
|
||||
│ └── versions/ # Gestion des versions et votes
|
||||
├── lib/ # Utilitaires et configurations
|
||||
└── public/ # Assets statiques
|
||||
```
|
||||
|
||||
## 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
|
||||
```
|
||||
|
||||
### Structure constitutionnelle
|
||||
La constitution est organisée hiérarchiquement :
|
||||
- **Titres** : Sections principales de la constitution
|
||||
- `numero`: Numéro du titre
|
||||
- `contenu`: Texte du titre
|
||||
- `status`: État du titre (brouillon, publié)
|
||||
|
||||
- **Articles** : Contenus détaillés sous chaque titre
|
||||
- `numero`: Numéro de l'article
|
||||
- `contenu`: Texte de l'article
|
||||
- `titre`: Référence au titre parent
|
||||
- `status`: État de l'article
|
||||
|
||||
### Système participatif
|
||||
- **Commentaires** : Discussions sur les titres
|
||||
- `contenu`: Texte du commentaire
|
||||
- `titre`: Titre concerné
|
||||
- `user_created`: Auteur du commentaire
|
||||
|
||||
- **Votes** : Système d'évaluation des versions
|
||||
- `content_version_id`: Version concernée
|
||||
- `vote`: Valeur du vote (+1 ou -1)
|
||||
- `user_created`: Identifiant du votant
|
||||
- `date_created`: Date du vote
|
||||
|
||||
## Installation et développement
|
||||
|
||||
### Prérequis
|
||||
- Node.js 16+
|
||||
- Yarn
|
||||
- Instance Directus
|
||||
|
||||
### Configuration
|
||||
```env
|
||||
DIRECTUS_API_URL= # URL de l'API Directus
|
||||
NEXTAUTH_URL= # URL de base de l'application
|
||||
NEXTAUTH_SECRET= # Secret pour NextAuth
|
||||
```
|
||||
|
||||
### Installation
|
||||
```bash
|
||||
# Installation des dépendances
|
||||
yarn install
|
||||
|
||||
# Développement
|
||||
yarn dev
|
||||
|
||||
# Production
|
||||
yarn build
|
||||
yarn start
|
||||
```
|
||||
|
||||
## Contribution
|
||||
|
||||
Nous encourageons toute contribution visant à améliorer la plateforme. Pour contribuer :
|
||||
|
||||
1. Fork le projet
|
||||
2. Créer une branche (`git checkout -b feature/AmazingFeature`)
|
||||
3. Commit les changements (`git commit -m 'feat: Add some AmazingFeature'`)
|
||||
4. Push vers la branche (`git push origin feature/AmazingFeature`)
|
||||
5. Ouvrir une Pull Request
|
||||
|
||||
### Conventions
|
||||
- XO pour le linting
|
||||
- Commits conventionnels (feat:, fix:, etc.)
|
||||
|
||||
## Sécurité
|
||||
|
||||
- Authentification via NextAuth.js
|
||||
- Protection des routes sensibles
|
||||
- Validation des entrées utilisateur
|
||||
- Gestion des autorisations par Directus
|
||||
|
||||
## 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.
|
||||
|
||||
Reference in New Issue
Block a user