Skip to content

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