Files
dynasqy/docs/README.md
T
2026-08-24 08:53:20 +00:00

201 lines
4.6 KiB
Markdown

# 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<br/>dynasqy)]
end
subgraph "Services externes"
SMTP[Infomaniak SMTP<br/>mail.infomaniak.com:465]
VAPID[Web Push<br/>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.