Add detailed documentation
This commit is contained in:
+235
@@ -0,0 +1,235 @@
|
||||
# Gestion - Documentation détaillée
|
||||
|
||||
## Architecture
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "Frontend (Next.js 14)"
|
||||
Pages[App Router Pages]
|
||||
Components[Composants React]
|
||||
Forms[react-hook-form + zod]
|
||||
Charts[Recharts]
|
||||
end
|
||||
|
||||
subgraph "Backend (Next.js API Routes)"
|
||||
API[API Routes]
|
||||
Auth[Auth Middleware<br/>jose JWT]
|
||||
Mail[Nodemailer]
|
||||
end
|
||||
|
||||
subgraph "Base de données"
|
||||
PG[(PostgreSQL 17<br/>gestion_secourit)]
|
||||
Prisma[Prisma Client 5]
|
||||
end
|
||||
|
||||
subgraph "Services externes"
|
||||
SMTP[Infomaniak SMTP<br/>smtp.infomaniak.ch:465]
|
||||
end
|
||||
|
||||
Pages --> Components
|
||||
Components --> Forms
|
||||
Components --> Charts
|
||||
Components --> API
|
||||
API --> Auth
|
||||
API --> Prisma
|
||||
API --> Mail
|
||||
Prisma --> PG
|
||||
Mail --> SMTP
|
||||
```
|
||||
|
||||
## Modèle de données (Prisma)
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USER ||--o{ SESSION : "a"
|
||||
USER ||--o{ CLIENT : "gère"
|
||||
USER ||--o{ QUOTE : "crée"
|
||||
USER ||--o{ SALE : "enregistre"
|
||||
USER ||--o{ TODO : "a"
|
||||
CLIENT ||--o{ QUOTE : "reçoit"
|
||||
CLIENT ||--o{ CONTRACT : "a"
|
||||
CLIENT ||--o{ SALE : "a"
|
||||
QUOTE ||--o{ QUOTE_ITEM : "contient"
|
||||
QUOTE ||--o| CONTRACT : "devient"
|
||||
CONTRACT ||--o{ INVOICE : "génère"
|
||||
SALE ||--o{ SALE_ITEM : "contient"
|
||||
|
||||
USER {
|
||||
string id PK
|
||||
string email UK
|
||||
string name
|
||||
string passwordHash
|
||||
string role
|
||||
}
|
||||
|
||||
CLIENT {
|
||||
string id PK
|
||||
string name
|
||||
string email
|
||||
string phone
|
||||
string address
|
||||
string siret
|
||||
enum type PROSPECT|CLIENT
|
||||
boolean isProfessional
|
||||
string userId FK
|
||||
}
|
||||
|
||||
QUOTE {
|
||||
string id PK
|
||||
string clientId FK
|
||||
string userId FK
|
||||
string name
|
||||
string quoteNumber
|
||||
enum status DRAFT|PROPOSAL|SENT|ACCEPTED|REJECTED|EXPIRED
|
||||
float setupTotal
|
||||
float monthlyTotal
|
||||
float costTotal
|
||||
float marginTotal
|
||||
float discount
|
||||
int travelKm
|
||||
float travelCost
|
||||
}
|
||||
|
||||
QUOTE_ITEM {
|
||||
string id PK
|
||||
string quoteId FK
|
||||
enum type PRODUCT|SERVICE
|
||||
string label
|
||||
float unitPrice
|
||||
float costPrice
|
||||
int quantity
|
||||
boolean isRecurring
|
||||
float setupPrice
|
||||
float monthlyPrice
|
||||
}
|
||||
|
||||
CONTRACT {
|
||||
string id PK
|
||||
string clientId FK
|
||||
string quoteId FK
|
||||
string userId FK
|
||||
string contractNumber
|
||||
enum status ACTIVE|TERMINATED|CANCELLED
|
||||
date startDate
|
||||
date endDate
|
||||
}
|
||||
|
||||
INVOICE {
|
||||
string id PK
|
||||
string clientId FK
|
||||
string contractId FK
|
||||
string userId FK
|
||||
string invoiceNumber
|
||||
enum status DRAFT|SENT|PAID|OVERDUE
|
||||
float total
|
||||
date dueDate
|
||||
}
|
||||
|
||||
SALE {
|
||||
string id PK
|
||||
string clientId FK
|
||||
string userId FK
|
||||
float total
|
||||
date saleDate
|
||||
string proposal
|
||||
}
|
||||
|
||||
SALE_ITEM {
|
||||
string id PK
|
||||
string saleId FK
|
||||
string productId
|
||||
int quantity
|
||||
float unitPrice
|
||||
}
|
||||
|
||||
TODO {
|
||||
string id PK
|
||||
string userId FK
|
||||
string title
|
||||
string description
|
||||
enum priority LOW|MEDIUM|HIGH
|
||||
boolean completed
|
||||
}
|
||||
```
|
||||
|
||||
## Pages et Routes
|
||||
|
||||
### Pages (Frontend)
|
||||
| Route | Description |
|
||||
|-------|-------------|
|
||||
| `/` | Dashboard principal |
|
||||
| `/login` | Page de connexion |
|
||||
| `/clients` | Liste des clients |
|
||||
| `/quotes` | Liste des devis |
|
||||
| `/contracts` | Liste des contrats |
|
||||
| `/invoices` | Liste des factures |
|
||||
| `/sales` | Liste des ventes |
|
||||
| `/servers` | Gestion serveurs |
|
||||
| `/todos` | To-do list |
|
||||
|
||||
### API Routes
|
||||
| Méthode | Route | Description |
|
||||
|---------|-------|-------------|
|
||||
| POST | `/api/auth/login` | Connexion |
|
||||
| POST | `/api/auth/register` | Inscription |
|
||||
| GET | `/api/auth/me` | Profil |
|
||||
| GET | `/api/clients` | Liste clients |
|
||||
| POST | `/api/clients` | Créer client |
|
||||
| GET | `/api/quotes` | Liste devis |
|
||||
| POST | `/api/quotes` | Créer devis |
|
||||
| GET | `/api/contracts` | Liste contrats |
|
||||
| GET | `/api/invoices` | Liste factures |
|
||||
| GET | `/api/sales` | Liste ventes |
|
||||
| GET | `/api/dashboard` | Données dashboard |
|
||||
| GET | `/api/todos` | Liste to-dos |
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
### Clients
|
||||
- Types : prospect, client
|
||||
- Informations pro (SIRET) ou perso
|
||||
- Historique devis/contrats/factures
|
||||
|
||||
### Devis
|
||||
- Lignes avec prix unitaire, coût, quantité
|
||||
- Calcul automatique : setup total, mensuel, marge
|
||||
- Frais de déplacement (km)
|
||||
- Statuts : brouillon → proposition → envoyé → accepté/refusé/expiré
|
||||
- Conversion en contrat
|
||||
|
||||
### Contrats
|
||||
- Liés à un devis accepté
|
||||
- Suivi durée (début/fin)
|
||||
- Génération de factures
|
||||
|
||||
### Factures
|
||||
- Numérotation auto
|
||||
- Statuts : brouillon → envoyé → payé → en retard
|
||||
- Notifications email
|
||||
|
||||
### Ventes
|
||||
- Enregistrement avec lignes
|
||||
- Référencement produits
|
||||
|
||||
### To-do list
|
||||
- Priorités (low/medium/high)
|
||||
- Suivi complétion
|
||||
|
||||
## Développement
|
||||
|
||||
```bash
|
||||
cd /opt/gestion
|
||||
npm install
|
||||
npx prisma generate
|
||||
npx prisma db push
|
||||
npm run dev # Next.js dev sur :3005
|
||||
```
|
||||
|
||||
## Déploiement
|
||||
|
||||
```bash
|
||||
# Production (bare metal, pas Docker)
|
||||
NODE_ENV=production nohup npx next start -p 3005 &
|
||||
```
|
||||
|
||||
> **Note** : Pas de process manager. Envisager pm2 ou systemd.
|
||||
Reference in New Issue
Block a user