Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.colismove.com/llms.txt

Use this file to discover all available pages before exploring further.

Quatre scénarios couvrent les fonctionnalités de scaling : partage d’une annonce entre plusieurs sender (Sc 12), comptes B2B (Sc 13), modération chat (Sc 14), et pricing différencié par catégorie (Sc 15).

Sc 12 — Réservation multi-colis (8 kg partagé)

Un expéditeur réserve 8 kg sur une annonce en créant 3 sous-réservations (un parent + deux enfants). Chaque enfant correspond à un colis distinct, mais un seul PaymentIntent paie l’ensemble.

Cycle parent ↔ enfants

Endpoint enfants

GET /v1/api/bookings/{parentId}/children
Retourne la liste des sous-réservations enfants d’un booking parent.

Particularités

  • Un seul PaymentIntent Stripe sur le parent
  • Refund cascade sur enfants en cas d’annulation
  • Transitions parent → enfants automatiques (ACCEPTEE, EN_COURS_DE_LIVRAISON, LIVREE, ANNULEE)
  • Si un enfant tombe en LITIGE → ne bloque pas les autres enfants
Référence : commit 2023944

Sc 13 — Agence B2B publie annonce groupée

Module dédié colismove-agency (74 fichiers, 11 use cases hex). Une agence professionnelle gère plusieurs branches et employés, et publie des annonces groupées (par exemple un convoi régulier Yaoundé → Paris).

Structure agence

EntitéDescription
AgenceCompte B2B mère, KYC docs, Stripe Connect platform
BrancheFiliale par ville/région
EmployéCarrier individuel rattaché à une branche
Annonce groupéePubliée par l’agence, affectée à un employé après acceptation

Tests E2E

Module colismove-agency couvert par tests d’intégration en CI continue.

Sc 14 — Anti-contournement chat (regex filtre)

Service Firebase Firestore avec filtre regex appliqué côté backend (pas Firestore rules) pour détecter et bloquer les patterns d’évasion de plateforme (numéros de téléphone, emails, liens externes).

Patterns bloqués

  • Numéros de téléphone (avec ou sans indicatif)
  • Adresses email
  • Liens externes (http://, www.)
  • Identifiants WhatsApp / Telegram

Sc 15 — Prix par catégorie

Epic 4 complète (stories 4.1 → 4.11). Permet à un transporteur de définir un prix par kg différent par catégorie acceptée (ex : électronique 8€/kg, documents 2€/kg).

Modèle domain (Story 4.2)

// AnnonceCategorie record
record AnnonceCategorie(
    Long categorieId,
    String nom,
    BigDecimal pricePerKg  // nullable, fallback annonce
) {
    BigDecimal effectivePricePerKg(BigDecimal annoncePricePerKg) {
        return Optional.ofNullable(pricePerKg).orElse(annoncePricePerKg);
    }
}

// Annonce.prixPourCategorie
BigDecimal prixPourCategorie(Long categorieId) {
    return categories.stream()
        .filter(c -> c.categorieId().equals(categorieId))
        .findFirst()
        .orElseThrow(() -> new CategorieIntrouvableException())
        .effectivePricePerKg(this.pricePerKg);
}

Backward compat 100%

  • Annonces existantes avec pricePerKg global → continuent de fonctionner
  • category.pricePerKg = NULL → fallback annonce.pricePerKg via SQL COALESCE
  • Plafond 999€/kg validé côté domain

SQL recherche (Story 4.10)

-- priceMaxLessThanForCategory(maxPrice, code)
INNER JOIN annonce_categorie ac ON ac.annonce_id = a.id
WHERE ac.code = :code
  AND COALESCE(ac.price_per_kg, a.price_per_kg) <= :maxPrice

-- orderByEffectivePriceForCategory(code, descending)
ORDER BY COALESCE(ac.price_per_kg, a.price_per_kg) ASC|DESC

Stories Epic 4

#StoryStatut
4.1V21 migration price_per_kg nullableDone
4.2Domain effectivePricePerKg + record CategoriePricingDone
4.3REST DTOs dual formatDone
4.4CalculPrixReservationService BigDecimal HALF_UPDone
4.5Persistence prix per-ligneDone
4.6Filtre prix-effectif rechercheDone
4.7AnnonceCategorieResult enrichiDone
4.8Stripe charge multi-prix domainDone
4.9categorieFilter rechercheDone
4.10Specs SQL avancéesDone
4.11JMH bench P95 < 200ms / 50k datasetPending

Récap modules impactés

ScénarioModules backend
Sc 12colismove-reservation (cascade), colismove-finances (single PaymentIntent)
Sc 13colismove-agency (74 fichiers dédiés)
Sc 14Service Firebase Firestore (côté backend, pas rules)
Sc 15colismove-annonces, colismove-reservation, colismove-finances