Files
api.konstitisyon.nu/README.md
T

4.3 KiB

api.konstitisyon.nu

Backend Directus pour konstitisyon.nu, 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.nu/
├── 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

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 :

cp .env.sample .env

Démarrage

# 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 :

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.