# DynaSQY - Documentation détaillée ## Architecture ```mermaid graph TD subgraph "Frontend (React/Vite)" App[App.jsx] Auth[AuthContext] Components[Composants React] PWA[Service Worker / PWA] end subgraph "Backend (Express)" Server[server.js] Routes[Routes API] Controllers[Controllers] Middleware[Middleware JWT] Services[Services] end subgraph "Base de données" MariaDB[(MariaDB 10.11
dynasqy)] end subgraph "Services externes" SMTP[Infomaniak SMTP
mail.infomaniak.com:465] VAPID[Web Push
VAPID Keys] end App --> Auth App --> Components App --> PWA Components -->|API calls| Server Server --> Routes Routes --> Controllers Controllers --> Middleware Controllers --> MariaDB Controllers --> SMTP Controllers --> VAPID ``` ## Modèle de données ```mermaid erDiagram MEMBERS ||--o{ INVITATIONS : "reçoit" MEMBERS ||--o{ ABSECTIONS : "a" MEMBERS ||--o{ ACTIVITY_LOGS : "génère" MEMBERS ||--o{ HONORS : "reçoit" MEMBERS ||--o{ RECOMMENDATIONS : "reçoit" MEMBERS ||--o{ PRESENTATION_SLIDES : "a" EVENTS ||--o{ INVITATIONS : "contient" EVENTS ||--o{ ACTIVITY_LOGS : "lié à" MEMBERS { int id PK string name string email string phone string company string role string avatar boolean isActive datetime created_at } EVENTS { int id PK string title date date string location string description string type int created_by } INVITATIONS { int id PK int member_id FK int event_id FK string status datetime created_at } ABSECTIONS { int id PK int member_id FK date start_date date end_date string reason } HONORS { int id PK int member_id FK string type string description date date } ACTIVITY_LOGS { int id PK int member_id FK string action json details datetime created_at } ``` ## API Routes | Méthode | Route | Description | Auth | |---------|-------|-------------|------| | POST | `/api/auth/login` | Connexion | Non | | POST | `/api/auth/register` | Inscription | Non | | GET | `/api/auth/me` | Profil utilisateur | Oui | | GET | `/api/members` | Liste membres | Oui | | POST | `/api/members` | Ajouter membre | Admin | | PUT | `/api/members/:id` | Modifier membre | Admin | | DELETE | `/api/members/:id` | Supprimer membre | Admin | | GET | `/api/events` | Liste événements | Oui | | POST | `/api/events` | Créer événement | Admin | | GET | `/api/invitations` | Liste invitations | Oui | | POST | `/api/invitations` | Créer invitation | Admin | | GET | `/api/gallery` | Galerie photos | Oui | | POST | `/api/gallery` | Ajouter photo | Admin | | GET | `/api/honors` | Liste honneurs | Oui | | POST | `/api/recommendations` | Ajouter recommandation | Membre | | GET | `/api/stats` | Statistiques | Admin | | POST | `/api/push/subscribe` | Subscribe push | Oui | | GET | `/api/export/:format` | Export CSV/PDF | Admin | ## Fonctionnalités ### Membres - CRUD complet avec avatars - Rôles : admin, membre - Statut actif/inactif - Recherche et filtrage ### Événements - Création avec date, lieu, description - Types : réunion, conférence, social - Invitations avec suivi de statut (accepté/refusé/en attente) - Notifications push aux membres ### Absences - Suivi des absences par membre - Périodes définies (début/fin) - Raison optionnelle ### Honneurs & Recommandations - Système d'honneurs (gladiateur, légende, etc.) - Recommandations entre membres - Slideshow de présentation ### Galerie - Upload de photos - Organisation par événement - Stockage sur volume Docker bind-mount ### Notifications Push - VAPID keys pour web push - Abonnement par membre - Envoi lors de nouveaux événements/invitations ### Export - Export CSV des membres - Export PDF (via LibreOffice dans le container) ## Développement ```bash # Backend cd backend npm install node seed.js # Générer les mots de passe hashés node server.js # Démarre sur :3000 # Frontend cd frontend npm install npm run dev # Vite sur :5173 ``` ## Variables d'environnement Voir README.md pour la liste complète. ## Déploiement Docker ```yaml services: db: # MariaDB 10.11 backend: # Node.js/Express frontend: # React/Vite + nginx ``` Le frontend sert les fichiers statiques via nginx et proxy les appels API vers le backend.