NetRide (marketed under the brand name Waya) is an urban and intercity carpooling and intercity bus booking platform, tailored for key routes in Cameroon (Douala, Yaoundé, Bafoussam, etc.).
# 🚗 Waya / NetRide Backend — API REST & Service Géospatial PostGIS
---
## 📌 Présentation du Projet
**Waya / NetRide** est la plateforme numérique de **covoiturage urbain et interurbain** couplée à la **réservation de bus intercités** (Douala, Yaoundé, Bafoussam, etc.).
Ce dépôt contient le **serveur backend Spring Boot 3.x** développé selon les principes de la **Clean Architecture** (4 couches), intégrant des requêtes géospatiales **PostGIS** (`ST_DWithin`, `ST_Distance`), la sécurité **Spring Security JWT**, les communications temps réel **WebSocket STOMP**, l'instrumentation **Micrometer / Prometheus** et l'analyse de qualité continue sur **SonarCloud.io**.
---
## 🏗️ Architecture & Design Patterns
Le backend suit strictement la **Clean Architecture (Domain-Driven Design Light)** en 4 couches découplées :
```
netride-backend/src/main/java/com/waya/netride_backend/
├── domain/ # 🟢 Couche Domaine (Métier Pur & Contrats)
│ ├── enums/ # UserRole, VerificationStatus, TripStatus, TripType, BookingStatus, PaymentStatus, SosStatus...
│ ├── event/ # 🔔 Observer Pattern (SosTriggeredEvent, NotificationEvent)
│ ├── exception/ # Exceptions Métiers (InvalidStateTransitionException, InsufficientSeatsException...)
│ ├── factory/ # 🏭 Factory Method Pattern (TripFactory)
│ ├── state/ # 🔄 State Pattern (TripState: Draft, Published, InProgress, Completed, Cancelled)
│ └── strategy/ # 💳 Strategy Pattern (PaymentStrategy, MockMobileMoneyPaymentStrategy)
├── infrastructure/ # 🔵 Couche Infrastructure (Persistance, Sécurité, Adapteurs, WebSockets)
│ ├── adapter/ # 🔌 Adapter Pattern (SmsAdapter, MockSmsAdapter)
│ ├── config/ # 📡 Broker WebSocket STOMP (WebSocketConfig /ws)
│ ├── persistence/ # JPA Entities (UserEntity, TripEntity, BookingEntity, SosAlertEntity, ReviewEntity) & Repositories PostGIS
│ └── security/ …