mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
3.7 KiB
3.7 KiB
Architecture — SIOP V2
Rôle de ce document (playbook) : la vue d'ensemble en 3 niveaux (méthode C4 simplifiée : contexte → conteneurs → composants). Les décisions structurantes sont tracées en ADR (
adr/). Mis à jour à chaque release.
Niveau 1 — Contexte
Gardien (Karim) ──scan QR──▶ ┌─────────────────┐ ◀──navigateur── Bureau (Salma, Nadia, direction)
│ │
Technicien (Ahmed) ─mobile─▶ │ SIOP V2 │ ──emails──▶ demandeurs / alertes stock
│ │
Notices, historiques ──────▶ └─────────────────┘
(ingestion RAG, R5)
Niveau 2 — Conteneurs
┌───────────────────────────── Dokploy (Docker) ─────────────────────────────┐
│ │
│ apps/web ── nginx ──/api──▶ apps/api (NestJS) ──▶ PostgreSQL 18 │
│ (React 19, statique) │ auth JWT, permissions, métier │ (+ pgvector, PostGIS)
│ │──▶ Redis (BullMQ : jobs préventif, R2) │
│ apps/mobile (Expo, R4) ────▶│──▶ MinIO (FileStorage : photos, documents) │
│ /sync │ │
│ apps/ai (FastAPI, R5) ◀─────┘ (lecture métier via API ; écrit seulement │
│ RAG, embeddings les embeddings pgvector) │
└────────────────────────────────────────────────────────────────────────────┘
Règles de dépendance : toutes les écritures métier passent par l'API NestJS ; le web et
le mobile ne parlent qu'au contrat OpenAPI ; MinIO n'est accédé qu'à travers FileStorage.
Niveau 3 — Composants de l'API (état R0)
apps/api/src
├── auth/ JWT (access), guard global « fermé par défaut », @Public(),
│ démo-login (module conditionnel DEMO_MODE — ADR-002)
├── permissions/ matrice rôles × objets × droits (en base, cache 60 s),
│ @RequirePermission(objet, droit) + PermissionsGuard
├── users/ profils (R0 : lecture du profil courant ; gestion complète R1)
├── health/ /health (base, Redis, MinIO) — public
├── prisma/ PrismaService (client généré)
└── common/ zodToOpenApi, ZodValidationPipe, filtres d'erreurs
Chaque release ajoute ses modules (R1 : locations/assets/categories/teams ; R2 : work-orders/requests/preventive ; …) — le document est enrichi à chaque clôture.
La « règle d'or » du contrat
packages/shared (Zod) ──zodToOpenApi──▶ docs/openapi.json (committée)
│ openapi-typescript
▼
clients typés web / mobile (générés)
Toute modification d'API régénère spec + clients dans le même commit ; la CI
(ci-contract) échoue sur le moindre diff. Le front ne peut structurellement pas dériver.
Environnements
| Env | DEMO_MODE |
Données | Où |
|---|---|---|---|
| dev local | true |
seed démo | Docker local (pnpm infra:up) |
| démo en ligne | true (+ double verrou) |
seed démo | Dokploy |
| production client | absent | réelles | Dokploy |