pr-daaif
|
266ffaaf1b
|
feat(r1.1): socle backend du référentiel — modèle, contrat, API, seed, tests
- migration r1_referentiel : Category (EQUIPMENT/COMPONENT_TYPE), Location
(site → zone, lat/lng + colonne PostGIS générée geography(Point,4326)
+ index GIST), Asset (statut d'équipement), AssetComponent (organe sans
emplacement PAR CONSTRUCTION), Team, invitation sur User ; migration
autosuffisante (CREATE EXTENSION IF NOT EXISTS postgis)
- contrat : 21 nouvelles opérations (26 total), générateur OpenAPI étendu
aux paramètres de chemin ; spec + client web régénérés dans ce commit
- API : modules categories/locations/assets/teams + gestion des personnes
(liste, rôles, invitation lien 7 j à usage unique, activation publique
qui connecte directement, mise à jour rôle/équipes) — tout sous
@RequirePermission ; invariants en service (profondeur 2, kinds,
catégorie jamais supprimée)
- seed : parc de la maquette validée (5 sites + 8 zones, 8 appareils,
organes A1/B2, 9 catégories, 2 équipes) — idempotent
- 36 tests verts (couverture 96 % stmts / 85 % branches) : recette
site→zone→appareil→organes, matrice vivante, invitation→activation ;
smoke test sur build de prod
- CI : postgres → postgis/postgis:18-3.6 (la migration R1 l'exige)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 12:27:48 +01:00 |
|
pr-daaif
|
ce24d9c32b
|
build(r0.13): Dockerfiles api/web + compose Dokploy + runbook — R0 prêt à déployer
- image api : multi-stage (pnpm deploy --legacy --prod), client Prisma
régénéré dans l'arborescence déployée, binaryTargets explicites
(debian/arm64 openssl-3), entrypoint migrate deploy → seed optionnel
(SEED_ON_START, compilé dist/seed) → API ; non-root, healthcheck /health
- image web : nginx alpine, statique Vite, proxy /api résolu À LA REQUÊTE
(resolver Docker + variable — nginx démarre sans l'API), fallback SPA,
cache immuable /assets, healthcheck IPv4 (127.0.0.1)
- infra/docker-compose.dokploy.yml : 5 services préfixés siop2-, secrets
exigés, seul siop2-web rejoint dokploy-network (API jamais exposée)
- runbook docs/06-production/runbook-dokploy.md : topologie, profils
d'environnement, checklist première prod, rollback, répétition locale
- répétition locale validée de bout en bout : migrate+seed au boot,
parcours demo-login → /users/me à travers nginx conteneurisé, conteneurs
healthy ; le double verrou ADR-002 (DEMO_MODE sans I_KNOW en production)
a refusé de démarrer — observé en situation réelle
- prisma passe en dépendance de production (migrations au boot)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-15 22:58:42 +01:00 |
|
pr-daaif
|
8adb561b63
|
feat(r0.10): apps/api — auth fermée par défaut, matrice en base, démo-login ADR-002, seed
- packages/shared : rôles/catégories, schémas Zod, contrat d'API ;
pnpm contract → docs/openapi.json committée (règle d'or ADR-001)
- apps/api : NestJS 11 + Prisma 6, migration r0_identity (Role/Permission/User) ;
guard JWT global + @Public() ; PermissionsGuard (@RequirePermission,
matrice relue en base, cache 60 s) ; FileStorage (seul import MinIO) ; /health
- démo-login ADR-002 : module conditionnel DEMO_MODE (404 sinon, testé e2e),
double verrou production, refus des comptes isDemo=false
- seed idempotent : 7 rôles, matrice complète (70 lignes), 7 comptes démo
- 19 tests Jest (unit + e2e) ; smoke test sur build de prod
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-15 21:55:04 +01:00 |
|