Files
btpxpress-backend/docs/concepts/05-LIVRAISON.md
2025-10-01 01:37:34 +00:00

5.8 KiB

🚚 CONCEPT: LIVRAISON

📌 Vue d'ensemble

Le concept LIVRAISON gère la logistique et le suivi des livraisons de matériel sur les chantiers. Il couvre le transport, le suivi en temps réel, et la gestion des transporteurs.

Importance: (Concept important)


🗂️ Fichiers concernés

Entités JPA (domain/core/entity/)

Fichier Description Lignes
LivraisonMateriel.java Entité principale de livraison ~200
StatutLivraison.java Enum statuts (PLANIFIEE, EN_PREPARATION, EN_TRANSIT, LIVREE, ANNULEE, RETARDEE) ~30
ModeLivraison.java Enum modes de livraison ~25
TypeTransport.java Enum types de transport ~20

Services (application/service/)

Fichier Description
LivraisonMaterielService.java Service métier pour les livraisons

📊 Modèle de données

Entité LivraisonMateriel

@Entity
@Table(name = "livraisons_materiel")
public class LivraisonMateriel extends PanacheEntityBase {
  
  @Id
  @GeneratedValue(strategy = GenerationType.UUID)
  private UUID id;
  
  @ManyToOne
  @JoinColumn(name = "reservation_id")
  private ReservationMateriel reservation;
  
  @Column(name = "date_livraison_prevue", nullable = false)
  private LocalDateTime dateLivraisonPrevue;
  
  @Column(name = "date_livraison_reelle")
  private LocalDateTime dateLivraisonReelle;
  
  @Enumerated(EnumType.STRING)
  @Column(name = "statut", nullable = false)
  private StatutLivraison statut = StatutLivraison.PLANIFIEE;
  
  @Column(name = "transporteur", length = 200)
  private String transporteur;
  
  @Column(name = "numero_suivi", length = 100)
  private String numeroSuivi;
  
  @Enumerated(EnumType.STRING)
  @Column(name = "mode_livraison")
  private ModeLivraison modeLivraison;
  
  @Column(name = "adresse_livraison", length = 500)
  private String adresseLivraison;
  
  @Column(name = "cout_livraison", precision = 10, scale = 2)
  private BigDecimal coutLivraison;
}

Enum StatutLivraison

public enum StatutLivraison {
  PLANIFIEE,        // Livraison planifiée
  EN_PREPARATION,   // En cours de préparation
  EN_TRANSIT,       // En transit
  LIVREE,           // Livrée avec succès
  ANNULEE,          // Livraison annulée
  RETARDEE          // Livraison retardée
}

Champs principaux

Champ Type Obligatoire Description
id UUID Oui Identifiant unique
reservation ReservationMateriel Non Réservation associée
dateLivraisonPrevue LocalDateTime Oui Date/heure prévue
dateLivraisonReelle LocalDateTime Non Date/heure réelle
statut StatutLivraison Oui Statut actuel
transporteur String(200) Non Nom du transporteur
numeroSuivi String(100) Non Numéro de suivi
modeLivraison ModeLivraison Non Mode de livraison
adresseLivraison String(500) Non Adresse de livraison
coutLivraison BigDecimal Non Coût de la livraison

🔌 API REST

Base URL: /api/v1/livraisons

Endpoints disponibles

Méthode Endpoint Description
GET /api/v1/livraisons Liste toutes les livraisons
GET /api/v1/livraisons/{id} Détails d'une livraison
POST /api/v1/livraisons Créer une livraison
PUT /api/v1/livraisons/{id} Modifier une livraison
PUT /api/v1/livraisons/{id}/statut Changer le statut
GET /api/v1/livraisons/en-cours Livraisons en cours
GET /api/v1/livraisons/retardees Livraisons retardées
GET /api/v1/livraisons/stats Statistiques livraisons

💻 Exemples d'utilisation

1. Créer une livraison

curl -X POST http://localhost:8080/api/v1/livraisons \
  -H "Content-Type: application/json" \
  -d '{
    "reservationId": "reservation-uuid",
    "dateLivraisonPrevue": "2025-10-05T09:00:00",
    "transporteur": "Transport Express",
    "modeLivraison": "STANDARD",
    "adresseLivraison": "123 Rue du Chantier, 75001 Paris"
  }'

2. Mettre à jour le statut

curl -X PUT http://localhost:8080/api/v1/livraisons/{id}/statut \
  -H "Content-Type: application/json" \
  -d '{
    "statut": "EN_TRANSIT",
    "numeroSuivi": "TRACK123456"
  }'

3. Livraisons en cours

curl -X GET http://localhost:8080/api/v1/livraisons/en-cours

Réponse:

[
  {
    "id": "uuid",
    "statut": "EN_TRANSIT",
    "transporteur": "Transport Express",
    "numeroSuivi": "TRACK123456",
    "dateLivraisonPrevue": "2025-10-05T09:00:00",
    "adresseLivraison": "123 Rue du Chantier"
  }
]

🔧 Services métier

LivraisonMaterielService

Méthodes principales:

  • create(LivraisonDTO dto) - Créer une livraison
  • changerStatut(UUID id, StatutLivraison statut) - Changer le statut
  • findEnCours() - Livraisons en cours
  • findRetardees() - Livraisons retardées
  • calculerDelai(UUID id) - Calculer le délai
  • getStatistics() - Statistiques

📈 Relations avec autres concepts

  • RESERVATION_MATERIEL ⬅️ Une livraison peut être liée à une réservation
  • CHANTIER ⬅️ Une livraison est destinée à un chantier
  • MATERIEL ⬅️ Une livraison concerne du matériel

Validations

  • Date de livraison prévue obligatoire
  • Adresse de livraison valide
  • Statut cohérent avec les transitions
  • Coût de livraison positif

📚 Références


Dernière mise à jour: 2025-09-30
Version: 1.0
Auteur: Documentation BTPXpress