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