Files
flowdeck/ARCHITECTURE.md
T
bruno 336c7d8dfe feat: FlowDeck v0.2.0 — Kanban Gitea intégré
- Dashboard projets Gitea (user + orgs)
- Board Kanban 5 colonnes avec drag & drop (SortableJS)
- Sync bidirectionnelle colonnes ↔ labels Gitea
- Filtres milestone/label/assignee
- Notes Markdown par projet
- API REST (/api/health, /api/move, /api/col-mapping…)
- Colonnes custom, WIP limits
- Thème clair/sombre
- Cache Gitea TTL
- Docker + docker-compose
- Tests pytest
- Docs: README, ARCHITECTURE, CHANGELOG, ROADMAP
2026-07-08 08:41:31 -04:00

4.1 KiB

Architecture FlowDeck

Schéma

┌──────────────────────────────────────────────┐
│                  Browser                      │
│  HTMX + Alpine.js + SortableJS               │
└──────────────┬───────────────────────────────┘
               │ HTTP (Jinja2 HTML / JSON API)
┌──────────────▼───────────────────────────────┐
│              FastAPI (Python)                 │
│  ┌──────────┬──────────┬──────────┐          │
│  │ dashboard│  board   │  notes   │   api    │
│  └────┬─────┴────┬─────┴──────────┴────┬─────┘
│       │          │                     │
│  ┌────▼──────────▼─────────────────────▼─────┐
│  │        GiteaClient (httpx async)           │
│  │  repos, issues, labels, milestones         │
│  └──────────────────┬────────────────────────┘
│                     │
│  ┌──────────────────▼────────────────────────┐
│  │           SQLite (WAL mode)                │
│  │  boards, cards, notes, col_mapping         │
│  └───────────────────────────────────────────┘
└──────────────────────┬────────────────────────┘
                       │ HTTPS
┌──────────────────────▼────────────────────────┐
│             Gitea API REST v1                  │
│  git.dracodev.net                             │
└───────────────────────────────────────────────┘

Flux de données

  1. Dashboard : appelle /api/v1/user/repos + /api/v1/user/orgs Gitea → affiche liste projets
  2. Board : appelle /api/v1/repos/{owner}/{repo}/issues → mappe sur colonnes via BDD locale
  3. Drag & drop : SortableJS → POST /api/move → mise à jour SQLite + sync Gitea (labels/close)
  4. Notes : stockées en SQLite local (non sync Gitea)

Décisions techniques

  • SQLite (pas PostgreSQL) : KISS. Un fichier, pas de serveur. Migration future triviale via Alembic si besoin.
  • HTMX + Alpine.js (pas React) : Léger, progressif. Pas de build step.
  • Cache Gitea in-memory : TTL configurable, pas de Redis. Suffisant pour <100 repos.
  • Pas d'auth OAuth en v0.2 : token global Gitea. OAuth par utilisateur prévu v0.3.
  • Pas de webhooks : polling implicite au refresh. Webhooks prévus v0.4.

Base de données

boards           → config Kanban par projet (colonnes, WIP)
cards            → position des issues dans les colonnes
notes            → notes markdown par projet
col_mapping      → mapping colonne→label Gitea (sync bidirectionnelle)

Routes

GET  /                         → Dashboard projets
GET  /board/{owner}/{repo}     → Board Kanban
GET  /notes/{owner}/{repo}     → Notes markdown
POST /notes/{owner}/{repo}     → Sauvegarder notes
GET  /api/health               → Health check
GET  /api/stats                → Statistiques
GET  /api/projects             → Projets (JSON)
POST /api/move                 → Déplacer carte
POST /api/col-mapping          → Config mapping colonne→label
GET  /api/board-config/{o}/{r} → Config board
POST /api/board-config/{o}/{r} → MàJ config board