Architecture globale FailDaily

graph TD A[Utilisateur Web / Mobile] -->|HTTPS| B[Traefik Reverse Proxy] B --> C[Frontend Angular/Ionic] B --> D[API Node.js/Express] D --> E[(MySQL Principal)] D --> F[(Base Logs)] D --> G[Services externes
SMTP OVH, Push] C -->|REST| D subgraph "Monitoring & Sécurité" H[Winston Logger] I[Audit Trail] end D --> H H --> I style A fill:#f8f4ec style B fill:#fde68a style C fill:#ecfdf5 style D fill:#ecfdf5 style E fill:#fef3c7 style F fill:#fef3c7 style G fill:#e0f2fe style H fill:#e2e8f0 style I fill:#e2e8f0

Flux de données - Publication d'un Fail

sequenceDiagram participant U as Utilisateur participant App as FailDaily (Angular) participant API as API Node.js participant DB as MySQL participant LogDB as Base Logs U->>App: Publication d'un fail App->>App: Validation formulaire +
anonymisation optionnelle App->>API: POST /api/fails (JWT) API->>DB: Insertion fail +
events badges API-->>App: 201 Created +
fail enrichi App-->>U: Confirmation +
badge débloqué API->>LogDB: Trace modération Note over U,LogDB: Processus complet en <200ms

Architecture des conteneurs Docker

graph TB subgraph "Docker Compose Production" T[Traefik
Reverse Proxy + ACME] F[Frontend
Nginx + Angular/Ionic] B[Backend
Node.js/Express] M[(MySQL
Données applicatives)] L[(MySQL Logs
Journaux sécurité)] S[SMTP Relay
OVH Mail] A[Adminer
Administration DB] end Internet -->|443/HTTPS| T T -->|Route /| F T -->|Route /api| B B --> M B --> L B --> S A -.Accès restreint.-> M style T fill:#fde68a style F fill:#ecfdf5 style B fill:#ecfdf5 style M fill:#fef3c7 style L fill:#fef3c7 style S fill:#e0f2fe style A fill:#f8f4ec

Chronologie du stage (22 semaines)

gantt title Chronologie du projet FailDaily dateFormat YYYY-MM-DD section Préparation Audit & Cadrage :done, prep1, 2025-04-01, 2w Architecture :done, prep2, after prep1, 4w section Développement Backend API :done, dev1, after prep2, 4w Frontend Ionic :done, dev2, after dev1, 4w section Finalisation Intégration & Sécurité :done, final1, after dev2, 3w Déploiement & QA :done, final2, after final1, 3w Documentation :done, final3, after final2, 2w