xpeditis2.0/docs/features/csv-bookings.md
2026-05-14 21:11:54 +02:00

3.4 KiB

Réservations CSV & Portail Carrier


Vue d'ensemble

Le système de réservation CSV permet aux admins de créer des réservations en important des fichiers CSV et d'envoyer automatiquement un lien magique aux transporteurs pour qu'ils acceptent ou rejettent via un portail dédié.


Workflow complet

1. Admin upload CSV → création csv_bookings
2. Admin assigne un carrier à la réservation
3. Système envoie email avec magic link (expiry 1h)
4. Carrier clique → authentification automatique (token URL)
5. Carrier voit les détails → Accept ou Reject
6. Activité logguée dans carrier_activities
7. Admin voit le statut mis à jour en dashboard

API — Réservations CSV (Admin)

Méthode Route Description
GET /api/v1/csv-bookings Liste des réservations CSV
POST /api/v1/csv-bookings Créer une réservation CSV
GET /api/v1/csv-bookings/:id Détail d'une réservation
PATCH /api/v1/csv-bookings/:id Mettre à jour
DELETE /api/v1/csv-bookings/:id Supprimer
POST /api/v1/csv-bookings/:id/assign-carrier Assigner un carrier
POST /api/v1/csv-bookings/:id/send-magic-link Envoyer le lien magique

API — Portail Carrier

Méthode Route Description
GET /api/v1/carrier/auth Auth via magic link token
GET /api/v1/carrier/booking Voir la réservation assignée
POST /api/v1/carrier/booking/accept Accepter
POST /api/v1/carrier/booking/reject Rejeter
POST /api/v1/carrier/booking/documents Uploader des documents

Authentification portail carrier

Le lien magique contient un token unique :

https://app.xpeditis.com/carrier/auth?token=xxxxxxxx

Le token est stocké dans csv_bookings.carrier_magic_link_token (hashé). Expiry : 1 heure. Si expiré, l'admin doit renvoyer un nouveau lien.


Statuts des réservations CSV

Statut Description
pending En attente d'assignation carrier
sent Lien magique envoyé au carrier
accepted Carrier a accepté
rejected Carrier a refusé
in_transit En cours de transport
delivered Livré

Pages frontend

Route Description
/dashboard/csv-bookings Liste admin des réservations CSV
/carrier/auth Page d'auth carrier (via magic link)
/carrier/booking Dashboard carrier (accept/reject)
/carrier/documents Upload documents carrier

Import CSV (upload admin)

Le fichier CSV peut être uploadé via POST /api/v1/admin/csv-rates/upload.

Format des colonnes requis : voir ../csv-system/CSV_RATE_SYSTEM.md.


Profils carrier

Les carriers qui utilisent le portail ont un CarrierProfile lié à leur Organization. Chaque action (accept, reject, document upload) est tracée dans carrier_activities.

SELECT ca.action, ca.created_at, cb.booking_number
FROM carrier_activities ca
JOIN csv_bookings cb ON cb.id = ca.csv_booking_id
WHERE ca.carrier_profile_id = 'xxx'
ORDER BY ca.created_at DESC;

Template MJML dans apps/backend/src/infrastructure/email/templates/.

Variables disponibles :

  • bookingNumber — numéro de réservation
  • magicLink — URL avec token
  • expiresIn — durée de validité ("1 heure")
  • carrierName — nom du carrier