update README
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 📚 Documentation API - Plateforme de Gestion de Commandes
|
||||
|
||||
**Version:** 5.2.0
|
||||
**Date:** 2026-05-01
|
||||
**Version:** 5.3.0
|
||||
**Date:** 2026-05-15
|
||||
**Base URL prod:** `https://mln-uber.club` (HTTPS via WAF nginx + ModSecurity)
|
||||
**Base URL dev:** `http://localhost:8080`
|
||||
**Technologies:** Go 1.24, Gin, PostgreSQL 16, Redis 7, React 19 + Vite, Expo 54 (React Native), TomTom API
|
||||
@@ -35,12 +35,15 @@ Cette API REST complète gère une plateforme de livraison avec assignation auto
|
||||
- **📍 Suivi temps réel** avec ETA et géolocalisation
|
||||
- **🔄 Système de queues** Redis optimisé pour les livraisons
|
||||
- **⚡ Workers automatiques** (nettoyage, assignation, notifications)
|
||||
- **🎯 Système de pénalités** pour la gestion des comportements
|
||||
- **🎯 Système de pénalités** pour la gestion des comportements (client & livreur)
|
||||
- **🔔 Notifications push** Expo (iOS/Android) pour clients et livreurs
|
||||
- **🤖 Intégration Telegram** pour alertes et notifications admin/livreur
|
||||
- **💸 Paiements crypto** via NowPayments (webhook HMAC)
|
||||
- **🛡️ WAF nginx + ModSecurity** (OWASP CRS) en production
|
||||
- **📱 Applications mobiles** Expo 54 (client + admin/livreur)
|
||||
- **🏷️ Prix par quantité activables/désactivables** — visibilité client filtrée automatiquement
|
||||
- **⏱️ Bouton "Client absent"** — timer 5 min au statut `arrived`, amende automatique au livreur si annulation
|
||||
- **📲 OTA updates** canaux nommés par rôle (`pre-prod-client`, `production-client`, `pre-prod-admin`, etc.)
|
||||
|
||||
### 🏗️ Stack Technique
|
||||
|
||||
@@ -554,6 +557,7 @@ erDiagram
|
||||
int product_id FK
|
||||
int quantity
|
||||
float price
|
||||
boolean active_price
|
||||
}
|
||||
|
||||
PRODUCT_MEDIA {
|
||||
@@ -1046,6 +1050,8 @@ Authorization: Bearer <client_token>
|
||||
|
||||
### Produits (Public - Pas d'auth requis)
|
||||
|
||||
> **Filtrage des prix inactifs :** Chaque prix d'un produit porte un flag `active_price` (booléen). Les endpoints publics et client **n'exposent que les prix actifs** (`active_price = true`). Les rôles `admin` et `cabine` reçoivent tous les prix (actifs et inactifs) pour permettre la gestion complète. Côté frontend (web + mobile), les prix sont également filtrés au chargement (`filter(p => p.active_price !== false)`).
|
||||
|
||||
#### Liste des produits
|
||||
|
||||
```bash
|
||||
@@ -1069,7 +1075,8 @@ GET /api/v1/products
|
||||
"id": 1,
|
||||
"product_id": 1,
|
||||
"quantity": 1,
|
||||
"price": 12.50
|
||||
"price": 12.50,
|
||||
"active_price": true
|
||||
}
|
||||
],
|
||||
"media": [
|
||||
@@ -1851,7 +1858,30 @@ Content-Type: application/json
|
||||
|
||||
### Système de Pénalités
|
||||
|
||||
#### Appliquer une pénalité
|
||||
Les amendes sont stockées dans `clients.amende` (PostgreSQL). Tant que `amende > 0`, le middleware `BlockClientIfPenalty` bloque toute tentative de checkout.
|
||||
|
||||
**Échelle progressive (annulations) :**
|
||||
| Nbre d'annulations | Amende |
|
||||
|---|---|
|
||||
| 1ère | 20 € |
|
||||
| 2ème | 50 € |
|
||||
| 3ème | 100 € |
|
||||
| 4ème et + | 150 € |
|
||||
|
||||
**Sources d'amende :**
|
||||
- Client annule sa propre commande → `ApplyCancellationPenalty` (incrémente `cancellations_count`)
|
||||
- Livreur annule depuis le statut `arrived` (client absent) → même fonction appelée automatiquement
|
||||
|
||||
**Message d'erreur au checkout bloqué :**
|
||||
```json
|
||||
{
|
||||
"error": "Commande bloquée : vous avez une amende de 20€ en attente de paiement. Prenez attache avec Milieu Nantais sur signal pour régulariser votre situation..",
|
||||
"amende": 20.0,
|
||||
"blocked": true
|
||||
}
|
||||
```
|
||||
|
||||
#### Appliquer une pénalité (Admin)
|
||||
|
||||
```bash
|
||||
POST /api/v2/admin/protected/penalty
|
||||
@@ -2133,6 +2163,22 @@ Content-Type: application/json
|
||||
|
||||
> **Note :** Le passage à `livre` via ce endpoint requiert des coordonnées GPS valides pour la validation de proximité.
|
||||
|
||||
> **Amende automatique :** si le livreur annule une commande dont le statut courant est `arrived`, une amende progressive est automatiquement appliquée au client (`ApplyCancellationPenalty`) — échelle : 1ère=20€, 2ème=50€, 3ème=100€, 4ème+=150€. Le livreur peut déclencher cette annulation via le bouton **"Client absent"** (cf. section ci-dessous).
|
||||
|
||||
---
|
||||
|
||||
### Bouton "Client absent" (DashboardScreen)
|
||||
|
||||
Lorsque le statut d'une livraison passe à `arrived`, un timer de **5 minutes** démarre automatiquement dans l'app livreur (`frontend-admin`). Pendant ce délai, un compte à rebours est affiché sur la carte de livraison. Une fois les 5 minutes écoulées, le bouton **"Client absent"** apparaît.
|
||||
|
||||
**Comportement :**
|
||||
- Appui sur "Client absent" → annulation de la commande avec la raison `client_absent`
|
||||
- L'API reçoit `status: cancelled` + `issue_type: client_absent`
|
||||
- Le backend applique automatiquement `ApplyCancellationPenalty(clientUsername)` (amende progressive)
|
||||
- Le timer est stocké dans un `useRef` (pas de re-render) et comparé à `Date.now()` toutes les secondes
|
||||
|
||||
**Implémentation :** `frontend-admin/src/screens/delivery/DashboardScreen.tsx` — constante `ABSENT_TIMEOUT_SECS = 300`, ref `arrivedAtRef`, état `elapsedSeconds`.
|
||||
|
||||
---
|
||||
|
||||
### Position GPS
|
||||
@@ -2828,6 +2874,8 @@ stateDiagram-v2
|
||||
- Livreur PUT status=arrived
|
||||
- Admin/Cabine bouton "Le livreur est la"
|
||||
Notifie le client (Telegram + push)
|
||||
Timer 5min → bouton "Client absent"
|
||||
Annulation depuis arrived → amende client
|
||||
end note
|
||||
|
||||
note right of en_route
|
||||
@@ -2924,6 +2972,15 @@ Le systeme bascule automatiquement sur le calcul local:
|
||||
}
|
||||
```
|
||||
|
||||
#### 403 - Checkout bloqué (amende en attente)
|
||||
```json
|
||||
{
|
||||
"error": "Commande bloquée : vous avez une amende de 20€ en attente de paiement. Prenez attache avec Milieu Nantais sur signal pour régulariser votre situation..",
|
||||
"amende": 20.0,
|
||||
"blocked": true
|
||||
}
|
||||
```
|
||||
|
||||
#### 404 - Not Found
|
||||
```json
|
||||
{
|
||||
@@ -2990,8 +3047,27 @@ Le systeme bascule automatiquement sur le calcul local:
|
||||
|
||||
---
|
||||
|
||||
**Documentation mise à jour le :** 2026-05-01
|
||||
**Version API :** 5.2.0
|
||||
## 📋 Changelog
|
||||
|
||||
### v5.3.0 — 2026-05-15
|
||||
|
||||
- **Prix inactifs filtrés côté client** : le flag `active_price` sur `PRODUCT_PRICES` permet de désactiver un tarif sans le supprimer. Les endpoints publics/client et les frontends web+mobile masquent automatiquement les prix inactifs. Admin et cabine voient tous les prix.
|
||||
- **Désactivation au lieu de suppression** : dans la modal d'édition produit (admin), retirer un prix existant le désactive (`active_price = false`) plutôt que de le supprimer de la base.
|
||||
- **Amende automatique — livreur annule depuis `arrived`** : quand le livreur passe une commande en `cancelled` alors qu'elle était à `arrived`, `ApplyCancellationPenalty` est appelé automatiquement (amende progressive : 20→50→100→150€).
|
||||
- **Bouton "Client absent"** : après 5 minutes au statut `arrived`, l'app livreur affiche un bouton "Client absent" qui déclenche l'annulation avec amende.
|
||||
- **Message d'erreur checkout avec contact** : le message de blocage inclut désormais "Prenez attache avec Milieu Nantais sur signal pour régulariser votre situation."
|
||||
- **OTA channels par rôle** : les canaux Expo OTA sont désormais nommés `pre-prod-client` / `production-client` / `pre-prod-admin` / `production-admin` pour éviter les mises à jour croisées entre builds.
|
||||
|
||||
### v5.2.0 — 2026-05-01
|
||||
|
||||
- Activation/désactivation des prix par quantité (admin)
|
||||
- Gestion de stock améliorée
|
||||
- Refactoring handlers produits
|
||||
|
||||
---
|
||||
|
||||
**Documentation mise à jour le :** 2026-05-15
|
||||
**Version API :** 5.3.0
|
||||
**Technologies :** Go 1.24, Gin, PostgreSQL 16, Redis 7, React 19, Expo 54, TomTom API, ModSecurity WAF
|
||||
**Déploiement :** Docker Compose · Nginx + ModSecurity OWASP CRS · TLS 1.2/1.3
|
||||
**Base URL prod :** `https://mln-uber.club`
|
||||
|
||||
Reference in New Issue
Block a user