CamerMove v.0.1-beta

Documentation Technique Complete - Plateforme Multi-Services de Mobilite au Cameroun

Transport interurbain • Hotels • Location • Colis • Assurance • Evenements

1. Vue d'ensemble

CamerMove est une plateforme multi-services dediee a la mobilite au Cameroun. Elle connecte les voyageurs aux transporteurs, hotels, loueurs de vehicules et prestataires de services via un seul compte et un systeme de paiement unifie (Mobile Money).

Version

v.0.1-beta (Septembre 2026)

Frontend

Next.js 16, React 19, Tailwind v4, Zustand

Backend

Fastify 5, Prisma 6, PostgreSQL 16, Redis 7

Auth

JWT + Refresh Tokens + RBAC (4 roles)

API Docs

Swagger UI

Services

6 modules operationnels

Acces rapide : Web: http://localhost:3002 • API: http://localhost:3000 • Swagger: http://localhost:3000/docs • Health: http://localhost:3000/health

2. Architecture

2.1 Structure du monorepo

camermove/
+-- apps/
|   +-- api/           # API REST Fastify (port 3000)
|   +-- web/           # Frontend Next.js 16 (port 3002)
|   +-- worker/        # Jobs BullMQ + Consumer Kafka
+-- packages/
|   +-- config/        # Configuration Zod (loadEnv)
|   +-- db/            # Schema Prisma + repositories
|   +-- events/        # Types et producteurs Kafka
|   +-- frontend/      # Stores Zustand, hooks, API clients
|   +-- media/         # Stockage S3/MinIO
|   +-- observability/ # Prometheus + OpenTelemetry
|   +-- shared/        # Calculs financiers, BullMQ queues
+-- tests/             # Tests E2E Playwright
+-- docs/              # Documentation + screenshots
+-- infra/             # Docker Compose, Prometheus, Grafana

2.2 Principes directeurs

PrincipeImplementation
StatelessnessJWT dans chaque requete, pas de session serveur
IdempotenceHeader Idempotency-Key sur POST/PUT/PATCH
ValidationZod sur chaque endpoint API
Securiteargon2 + RBAC (4 roles) + audit logs
CacheRedis TTL 60s recherche, invalidation sur ecriture
Rate LimitingDouble couche IP + app-wide via Redis
AsyncKafka evenements + BullMQ taches differees

3. Modules (6 Services)

3.1 Transport Interurbain ACTIF

Module principal - recherche et reservation de bus interurbain.

Recherche

Origine, destination, date, nombre de passagers

Filtres

Prix, heure depart, type vehicule, places dispo

Selection siege

Carte interactive avec places disponibles/occupes

Hold

Reservation temporaire 15 min en attente paiement

Routes : /results → /trips/:id → /book/:tripId → /book/confirmation

API : GET /search, GET /trips/:id, POST /bookings

3.2 Hotels ACTIF

Recherche et reservation d'hebergements verifies.

Recherche

Par ville, dates, nombre personnes

Filtres

Prix, equipements, note

Detail

Photos, description, chambres disponibles

Reservation

Selection chambre + confirmation

Routes : /hotels → /hotels/:id → /hotels/confirmation

3.3 Location de Vehicules ACTIF

Location de vehicules avec prise en charge.

Catalogue

Vehicules par categorie (berline, SUV, utilitaire)

Disponibilite

Calendrier des reservations

Options

Prise en charge aéroport, chauffeur

Routes : /rentals → /rentals/:id → /rentals/confirmation

3.4 Transport de Colis ACTIF

Envoi et suivi de colis entre villes.

Envoi

Formulaire expediteur + destinataire + type colis

Calcul frais

Automatique selon poids et destination

Suivi

Statut en temps reel via numero tracking

Routes : /parcels (envoi/suivi) → /parcels/success → /parcels/track/:trackingNumber

3.5 Assurance Voyage ACTIF

Souscription assurance voyage (sante, bagages, rapatriement).

Devis

Calcul automatique selon destination et duree

Souscription

Formule basique, standard, premium, famille

Police

Document genere apres paiement

Routes : /insurance → /insurance/success

3.6 Billetterie Evenementielle ACTIF

Vente de billets pour concerts, matchs, festivals.

Evenements

Liste filtrable par ville, type, date

Reservation

Selection du nombre de places

Billet QR

Code QR unique verifier sur place

Routes : /events → /events/:id → /book/confirmation

4. Authentification

Systeme JWT avec 4 roles hierarchiques et refresh tokens securises.

4.1 Roles

RoleNiveauPermissions
voyageur1Reserver, voir ses reservations, payer
partenaire2Gerer ses trajets/hotels/vehicules
admin3Gerer utilisateurs, voir statistiques
super_admin4Acces complet + parametres systeme

4.2 Flux complet

1

Login

POST /auth/login avec email + password. Retourne accessToken (15min) + refreshToken (7j).

2

Stockage

Cookie cm_access (SameSite=Lax, 15min). Zustand store en memoire.

3

Requetes

Header Authorization: Bearer <accessToken> sur chaque appel API.

4

Middleware

Next.js middleware verifie cookie pour routes protegees (/dashboard, /tickets, /admin).

5

API Guard

requireAuth(role?) verifie signature JWT + permissions en base.

6

Refresh

Quand access token expire, POST /auth/refresh avec refreshToken pour en obtenir un nouveau.

4.3 Securite

5. Workflow de Reservation (Transport)

5.1 Etapes

1

Recherche /results

L'utilisateur saisit origine, destination, date, passagers. Appel API GET /api/v1/search.

2

Liste resultats

Affichage des trajets avec prix, horaires, places dispo. Filtrage client cote client.

3

Detail trajet /trips/:id

Carte des sieges interactive. WebSocket pour mise a jour temps reel des places.

4

Selection siege

Clic sur un siege disponible. Stockage dans Zustand booking store.

5

Informations passager /book/:tripId

Formulaire nom + telephone. Redirection login si non authentifie.

6

Confirmation

API POST /api/v1/bookings cree un hold de 15 min. Evenement Kafka booking.created.

7

Paiement /payments

Choix Orange Money ou MTN MoMo. Appel API POST /api/v1/payments.

8

Confirmation /book/confirmation

Billet QR genere. Evenements payment.completed + ticket.issued.

5.2 Diagramme

[Recherche] --> [Resultats] --> [Detail Trajet] --> [Selection Siege]
     |                                                    |
     v                                                    v
[Cache Redis]                                    [Zustand Store]
                                                       |
[Confirmation] <-- [Paiement] <-- [Hold 15min] <-- [Infos Passager]
     |
     v
[Billet QR] --> [Dashboard] --> [Email/SMS Notification]

6. Administration

Interface d'administration reservee aux roles admin et super_admin.

RouteDescriptionRole
/adminTableau de bord (stats, graphiques recharts)Admin+
/admin/usersGestion utilisateurs (CRUD, changement role)Admin+
/admin/tripsGestion trajets (creation, statut, export)Admin+
/admin/bookingsGestion reservations (confirmation, annulation)Admin+
/admin/paymentsSuivi paiements + reconciliationAdmin+
/admin/transportersGestion transporteurs partenairesAdmin+
/admin/settingsParametres (commission, hold, feature flags)Super-Admin

7. Espace Transporteur

RouteDescription
/transporterDashboard transporteur
/transporter/tripsListe de leurs trajets
/transporter/bookingsReservations pour leurs trajets
/transporter/routesLeurs itineraires
/transporter/vehiclesGestion de leur flotte
/transporter/applyFormulaire de candidature

8. Espace Partenaire

RouteDescription
/partnerDashboard partenaire
/partner/hotelsGestion de leurs hotels
/partner/rentalsGestion de leurs vehicules
/partner/parcelsGestion de leurs envois
/partner/eventsGestion de leurs evenements
/become-partnerPage publique de presentation

9. API REST & Swagger

L'API REST est documentee avec OpenAPI/Swagger et accessible a http://localhost:3000/docs.

METRouteAuthDescription
POST/api/v1/auth/registerNonInscription
POST/api/v1/auth/loginNonConnexion (retourne tokens)
POST/api/v1/auth/refreshNonRafraichir access token
POST/api/v1/auth/logoutOuiDeconnexion
GET/api/v1/searchNonRecherche trajets
GET/api/v1/trips/:idNonDetail trajet
POST/api/v1/bookingsOuiCreer reservation
GET/api/v1/bookings/:idOuiDetail reservation
POST/api/v1/bookings/:id/cancelOuiAnnuler reservation
POST/api/v1/paymentsOuiCreer paiement
GET/api/v1/tickets/lookupNonVerification billet (public)
GET/api/v1/me/bookingsOuiReservations utilisateur
GET/api/v1/me/ticketsOuiBillets utilisateur
GET/api/v1/me/dashboardOuiTableau de bord
Authorization: Bearer <access_token>\nContent-Type: application/json\nIdempotency-Key: <uuid>  # Pour POST/PUT/PATCH

10. Toutes les Routes (50+)

Pages publiques (30)

RouteDescription
/Accueil + 6 rails services
/resultsResultats recherche trajets
/trips/:idDetail trajet + selection siege
/hotelsListe hotels
/hotels/:idDetail hotel
/hotels/confirmationConfirmation hotel
/rentalsListe vehicules
/rentals/:idDetail vehicule
/rentals/confirmationConfirmation location
/parcelsEnvoi + suivi colis
/parcels/successConfirmation envoi
/parcels/track/:tnSuivi par numero
/eventsListe evenements
/events/:idDetail evenement
/insuranceDevis assurance
/insurance/successConfirmation assurance
/faqQuestions frequentes
/how-it-worksComment ca marche
/legal/cguConditions generales
/legal/privacyPolitique confidentialite
/contactFormulaire contact
/become-partnerDevenir partenaire
/transporter/applyCandidature transporteur
/loginConnexion
/registerInscription
/admin/loginConnexion admin
/tickets/lookupVerification billet
/intraurbanTransport intra-urbain
/auth/callbackCallback OAuth

Pages authentifiees (3)

RouteDescription
/dashboardTableau de bord voyageur
/book/:tripIdFormulaire reservation
/book/confirmationConfirmation

Pages admin (7)

RouteDescription
/adminDashboard
/admin/usersUtilisateurs
/admin/tripsTrajets
/admin/bookingsReservations
/admin/paymentsPaiements
/admin/transportersTransporteurs
/admin/settingsParametres

11. Captures d'ecran

33 captures d'ecran generees via Playwright (Chromium, Desktop + Mobile).

Homepage
Page d'accueil
Login
Connexion
Dashboard
Tableau de bord
Swagger
Swagger API Docs
Admin
Dashboard Admin
Mobile
Menu Mobile

Toutes les captures : homepage, results, hotels, rentals, parcels, events, insurance, faq, how-it-works, legal-cgu, legal-privacy, contact, become-partner, transporter-apply, login, register, admin-login, ticket-lookup, dashboard, dashboard-bookings, dashboard-tickets, admin-dashboard, admin-users, admin-trips, admin-bookings, admin-payments, admin-transporters, admin-settings, swagger, health, mobile-homepage, mobile-login, mobile-nav

12. Base de Donnees

12.1 Modeles principaux

ModeleDescriptionRelations
UserUtilisateursBookings, Tickets, Notifications
TripTrajetsRoute, Transport, Bookings
BookingReservationsUser, Trip, Passengers, Tickets, Payment
PassengerPassagersBooking
TicketBilletsBooking (QR code)
PaymentPaiementsBooking, Provider
RouteItinerairesTrips, Stops
TransportTransporteursTrips, User
HotelHotelsBookings, Rooms
RentalVehicleVehiculesRentals
EventEvenementsEventBookings
InsurancePolicyPolicesUser, Trip
ParcelColisSender, Tracking

12.2 Index

13. Evenements Kafka

EvenementDescriptionProducteur
booking.createdNouvelle reservationAPI
booking.cancelledReservation annuleeAPI
booking.confirmedConfirmeeWorker
payment.completedPaiement confirmeAPI
ticket.issuedBillet emisWorker
trip.reminder.24hRappel 24hWorker
hotel.booking.confirmedHotel confirmeeAPI
rental.booking.confirmedLocation confirmeeAPI
parcel.status.changedStatut colisAPI
insurance.policy.issuedPolice emiseAPI
event.booking.confirmedEvenement confirmeAPI

14. Mises a jour & Ameliorations

14.1 Ameliorations prioritaires

PrioriteActionDescription
HAUTEApiError exportExporter ApiError depuis lib/api/client.ts (dashboard page erreur)
HAUTEOAuth GoogleImplementer le flux complet Google OAuth
MOYENNENotificationsActiver email/SMS/WhatsApp via worker
MOYENNETests E2EEtendre Playwright a tous les workflows
MOYENNECI/CDAjouter GitHub Actions (typecheck, tests, deploy)
BASSEPWAService worker + manifest pour mode offline
BASSEi18nSupport multilingue (Francais/Anglais)
BASSEMobile AppReact Native pour iOS/Android
BASSEAnalyticsTableau de bord analytics avance
BASSEPartner APIAPI publique pour partenaires tiers

14.2 Problemes connus

Pour re-generer les screenshots : npx playwright test tests/screenshots.spec.ts --project=chromium