mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
2.2 KiB
2.2 KiB
ADR-001 — Stack technique
- Statut : acceptée (R0, 15 juillet 2026)
- Contexte : la V2 repart de zéro (code) mais pas de nulle part : la v1 a éprouvé une stack pendant 8 sprints (~400 tests). Atlas CMMS, notre référence fonctionnelle, est en Java Spring Boot + React MUI — cloner sa stack n'a aucun intérêt pédagogique ni pratique pour une équipe TypeScript.
Décision
| Couche | Choix | Justification |
|---|---|---|
| Monorepo | pnpm workspaces + Turborepo | Un dépôt, plusieurs apps, caches de tâches ; éprouvé v1 |
| API | NestJS (Node 24) + Prisma + PostgreSQL 18 | Architecture modulaire enseignable ; Prisma = modèle lisible par les étudiants |
| Extensions BDD | pgvector (RAG, R5) + PostGIS (carte, R1) | Un seul moteur de données pour tout |
| Cache/files | Redis (BullMQ pour les jobs, R2) | Génération mensuelle du préventif |
| Fichiers | MinIO derrière l'interface FileStorage |
S3-compatible auto-hébergé ; l'interface interdit tout couplage (règle lint) |
| Contrat | Zod → OpenAPI → clients typés (« règle d'or ») | Le front ne peut pas dériver du back ; CI bloquante |
| Web | React 19 + Vite + TanStack Query/Table + Tailwind v4 | Éprouvé v1 |
| UI kit | shadcn/ui thématisé par docs/02-design/tokens.css |
Composants possédés (copiés dans le repo), accessibles (Radix), thémables par tokens — le contraire du « DaisyUI brut » de la v1. Introduit en R0 (primitives) et enrichi par release |
| Mobile | Expo (Expo Go) — R4 | Démo par QR sans build natif ; leçons v1 consignées |
| IA | FastAPI (Python 3.13, uv) — R5 | Écosystème IA Python ; n'écrit jamais en base métier |
| Déploiement | Docker + Dokploy (PaaS auto-hébergé) | Choix du référent ; portable (tout est compose) |
Conséquences
- Un seul langage principal (TypeScript) du mobile à l'API — onboarding étudiant simplifié.
- La v1 sert de référence de lecture (décisions validées : machine à états OT, matrice de permissions en base, stock dérivé des mouvements, synchro à verrou optimiste) ; tout code V2 est réécrit et re-testé.
- Versions épinglées ; toute montée de version = tâche dédiée (risque n°5 du registre).