201 lines
4.6 KiB
Markdown
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.
|