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 |
|---|
| Agence | Compte B2B mère, KYC docs, Stripe Connect platform |
| Branche | Filiale par ville/région |
| Employé | Carrier individuel rattaché à une branche |
| Annonce groupée | Publié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
| # | Story | Statut |
|---|
| 4.1 | V21 migration price_per_kg nullable | Done |
| 4.2 | Domain effectivePricePerKg + record CategoriePricing | Done |
| 4.3 | REST DTOs dual format | Done |
| 4.4 | CalculPrixReservationService BigDecimal HALF_UP | Done |
| 4.5 | Persistence prix per-ligne | Done |
| 4.6 | Filtre prix-effectif recherche | Done |
| 4.7 | AnnonceCategorieResult enrichi | Done |
| 4.8 | Stripe charge multi-prix domain | Done |
| 4.9 | categorieFilter recherche | Done |
| 4.10 | Specs SQL avancées | Done |
| 4.11 | JMH bench P95 < 200ms / 50k dataset | Pending |
Récap modules impactés
| Scénario | Modules backend |
|---|
| Sc 12 | colismove-reservation (cascade), colismove-finances (single PaymentIntent) |
| Sc 13 | colismove-agency (74 fichiers dédiés) |
| Sc 14 | Service Firebase Firestore (côté backend, pas rules) |
| Sc 15 | colismove-annonces, colismove-reservation, colismove-finances |