Règles Métier
Cette page centralise les règles métier de l'application. Elle est destinée à tout développeur (humain ou IA) travaillant sur le frontend ou le backend.
Chaque règle est pilotée par une variable d'environnement pour permettre une adaptation sans modifier le code.
📍 Adresses Utilisateur
Contraintes
| Règle |
Détail |
Variable |
| Maximum d'adresses |
Un utilisateur ne peut pas avoir plus de 5 adresses. |
USER_MAX_ADDRESSES |
| Adresse par défaut non supprimable |
L'adresse marquée comme "par défaut" ne peut pas être supprimée. Il faut d'abord en définir une autre comme adresse par défaut. |
— |
| Minimum 1 adresse |
Un utilisateur doit toujours avoir au moins une adresse. La dernière adresse ne peut pas être supprimée. |
— |
Comportements attendus côté frontend
| Action |
Condition d'activation |
| Bouton "Supprimer" une adresse |
Désactivé si c'est l'adresse par défaut OU si c'est la seule adresse de la liste |
| Bouton "Ajouter une adresse" |
Désactivé si l'utilisateur a déjà atteint USER_MAX_ADDRESSES adresses |
⭐ Reviews (Avis & Notes)
Une review est composée d'une note (smallint) et d'un commentaire optionnel, rattachée à une commande et à une variante de produit spécifique. Un utilisateur ne peut poster qu'une seule review par commande.
Contraintes
| Action |
Conditions requises |
Variable |
| Ajouter une review |
Aucune review n'existe déjà pour cette commande ET le statut de l'expédition est DELIVERED ET la date d'achat est dans les 15 derniers jours. |
REVIEW_ADD_DAYS_LIMIT |
| Modifier une review |
La review n'a pas encore été modifiée (isEdited = false) ET la date de publication de la review est dans les 15 derniers jours. |
REVIEW_EDIT_DAYS_LIMIT |
| Supprimer une review |
La date de publication de la review est dans les 6 derniers mois. |
REVIEW_DELETE_MONTHS_LIMIT |
Note : La logique de chaque règle est encapsulée dans ReviewRightsService, appelé par ProductReviewVoter (attributs : REVIEW_ADD, REVIEW_EDIT, REVIEW_DELETE).
Comportements attendus côté frontend
| Action |
Condition d'affichage |
| Bouton "Laisser un avis" |
Affiché si aucune review n'existe, que l'expédition est DELIVERED et dans la fenêtre de REVIEW_ADD_DAYS_LIMIT jours |
| Bouton "Modifier mon avis" |
Affiché si isEdited = false ET dans la fenêtre de REVIEW_EDIT_DAYS_LIMIT jours depuis la publication de la review |
| Bouton "Supprimer mon avis" |
Affiché si la date de publication de la review est dans la fenêtre de REVIEW_DELETE_MONTHS_LIMIT mois |
Flux de cycle de vie d'une review
stateDiagram-v2
direction LR
[*] --> Éligible : Commande livrée et dans les délais
Éligible --> Publiée : Ajout
Publiée --> Modifiée : Modification unique dans les délais
Publiée --> Supprimée : Suppression dans les délais
Modifiée --> Supprimée : Suppression dans les délais
Supprimée --> [*]
🚚 Annulation de Commande
Un utilisateur peut annuler une commande uniquement dans la fenêtre de temps suivant sa création.
| Règle |
Détail |
Variable |
| Délai d'annulation |
La commande ne peut être annulée que dans les 24 heures suivant sa création. |
SHIPMENT_CANCELLATION_DELAY_HOURS |
Logique portée par le CancelShipmentVoter (attribut : CAN_CANCEL_SHIPMENT).
Comportements attendus côté frontend
| Action |
Condition d'affichage |
| Bouton "Annuler la commande" |
Affiché uniquement si la commande a été créée il y a moins de SHIPMENT_CANCELLATION_DELAY_HOURS heures |
📦 Statuts d'Expédition (ShipmentStatusCode)
Les statuts d'une expédition suivent le flux ci-dessous selon le type de produit.
stateDiagram-v2
direction LR
[*] --> PENDING
PENDING --> IN_TRANSIT : Produit en stock
PENDING --> IN_BUILD : Produit sur mesure
IN_BUILD --> IN_TRANSIT
IN_TRANSIT --> OUT_FOR_DELIVERY
OUT_FOR_DELIVERY --> DELIVERED
PENDING --> CANCELED
IN_TRANSIT --> FAILED_ATTEMPT
IN_TRANSIT --> LOST
IN_TRANSIT --> DAMAGED
FAILED_ATTEMPT --> RETURNED
| Statut |
Label |
Description |
PENDING |
En attente de traitement |
État initial de toute expédition |
IN_BUILD |
En cours de fabrication |
Uniquement pour les produits CUSTOM_MADE |
IN_TRANSIT |
En transit |
Expédition en cours d'acheminement |
OUT_FOR_DELIVERY |
En cours de livraison |
Dernier kilomètre |
DELIVERED |
Livrée |
État final nominal |
FAILED_ATTEMPT |
Échec de livraison |
Tentative de livraison échouée |
RETURNED |
Commande retournée |
Suite à un échec de livraison |
CANCELED |
Commande annulée |
Annulation dans le délai autorisé |
LOST |
Commande perdue |
|
DAMAGED |
Commande endommagée |
|
⚙️ Variables d'Environnement de Référence
| Variable |
Valeur par défaut |
Usage |
USER_MAX_ADDRESSES |
5 |
Nombre maximum d'adresses par utilisateur |
REVIEW_ADD_DAYS_LIMIT |
15 |
Délai (jours) pour poster une review après l'achat |
REVIEW_EDIT_DAYS_LIMIT |
15 |
Délai (jours) pour modifier une review après sa publication |
REVIEW_DELETE_MONTHS_LIMIT |
6 |
Délai (mois) pour supprimer une review après sa publication |
SHIPMENT_CANCELLATION_DELAY_HOURS |
24 |
Délai (heures) pour annuler une commande après sa création |