# priyanka-pitla277/ridewise architecture

> Architecture diagram of the GitHub repository priyanka-pitla277/ridewise, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-22). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/priyanka-pitla277/ridewise
- Repository: https://github.com/priyanka-pitla277/ridewise

## Overview

1. **Overall shape**
   RideWise is a **single-process, console-driven Java application** with an in-memory backend. There is no external database or web layer in this repo; the architecture is centered on a command-line `Main` entrypoint that orchestrates domain services.

2. **Entry and interaction layer**
   `com.airtribe.ridewise.Main` is the user-facing shell. It exposes the CLI menu for:
   registering riders/drivers, listing available drivers, requesting rides, completing rides, and viewing rides. This layer should be drawn as the top boundary that calls into services only.

3. **Service layer as the business boundary**
   The core workflow lives in:
   - `RiderService`
   - `DriverService`
   - `RideService`
   
   These classes coordinate validation, entity creation, state transitions, and repository access. They are the main application boundary between the CLI and domain/persistence concerns.

4. **Domain model**
   The primary entities are:
   - `Rider`
   - `Driver`
   - `Ride`
   - `Location`
   - `FareReceipt`
   
   These represent the ride-sharing domain state: users, vehicle/availability, trip lifecycle, coordinates, and fare output. `Ride` is the central aggregate tying rider, driver, locations, status, and pricing together.

5. **Repositories are in-memory persistence**
   Persistence is abstracted via repository interfaces and implementations:
   - `DriverRepository` / `DriverRepositoryImpl`
   - `RiderRepository` / `RiderRepositoryImpl`
   - `LocationRegistry`
   
   This is not database-backed; state is likely held in memory using concurrent collections. `LocationRegistry` is a supporting repository-like component used to track or resolve location-related data for matching.

6. **Strategy-based ride matching**
   Driver allocation is pluggable through `RideMatchingStrategy` with implementations:
   - `NearestDriverStrategy`
   - `LeastActiveDriverStrategy`
   
   `RideService` depends on the strategy interface rather than a concrete algorithm, so matching behavior can be swapped without changing ride orchestration. This is the main variability point in the system.

7. **Strategy-based fare calculation**
   Pricing is also pluggable through `FareStrategy` with implementations:
   - `DefaultFareStrategy`
   - `PeakHourFareStrategy`
   
   Fare computation is separated from ride lifecycle logic, allowing standard pricing and surge/peak pricing to be selected independently. `FareReceipt` is likely the output artifact of this pricing path.

8. **Ride lifecycle flow**
   The main business flow is:
   1. register rider / driver
   2. request ride
   3. choose driver via matching strategy
   4. compute fare via fare strategy
   5. create/update `Ride`
   6. mark ride completed and release driver availability
   
   `RideStatus` captures lifecycle state transitions, and `NoDriverAvailableException` handles the failure path when matching cannot find a driver.

9. **Shared domain rules and configuration**
   Supporting pieces include:
   - `VehicleType` and `RideStatus` enums for constrained domain values
   - `Constants` for shared configuration
   - `IdGenerator` for unique identifiers
   
   The readme emphasizes thread safety; the architecture likely relies on atomic ID generation and concurrent maps to keep the in-memory state safe under concurrent access.

10. **Testing and documentation boundary**
   Tests are manual, not a full automated suite:
   - repository manual test for `DriverRepositoryImpl`
   - service manual tests for rider, driver, and ride services
   
   The `docs/` folder contains class model, object relationships, requirements, and SOLID reflection, which are useful for diagramming the object graph and service/repository responsibilities.

11. **What to show in an architecture diagram**
   A clear diagram should show:
   - `Main` at the top
   - services in the middle
   - repositories and strategy interfaces below
   - domain models as shared objects between them
   
   The most important dependency arrows are: `Main -> Services`, `RideService -> Strategy interfaces`, `Services -> Repositories`, and `Repositories <-> Domain models`. The system is intentionally layered and interface-driven, with in-memory state at the bottom.

Main entry points: [`src/com/airtribe/ridewise/service/RideService.java`](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RideService.java) (Ride Service), [`src/com/airtribe/ridewise/model/Ride.java`](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Ride.java) (Ride), [`src/com/airtribe/ridewise/service/RiderService.java`](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RiderService.java) (Rider Service), [`src/com/airtribe/ridewise/service/DriverService.java`](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/DriverService.java) (Driver Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry"]
  node_main["Main<br/>cli entrypoint<br/>[Main.java]"]
end

subgraph group_services["Services"]
  node_rider_service["Rider Service<br/>application service<br/>[RiderService.java]"]
  node_driver_service["Driver Service<br/>application service<br/>[DriverService.java]"]
  node_ride_service["Ride Service<br/>workflow service<br/>[RideService.java]"]
end

subgraph group_domain["Domain"]
  node_ride["Ride<br/>domain aggregate<br/>[Ride.java]"]
  node_driver["Driver<br/>domain entity<br/>[Driver.java]"]
  node_rider["Rider<br/>domain entity<br/>[Rider.java]"]
  node_location(("Location<br/>value object<br/>[Location.java]"))
  node_fare_receipt["Fare Receipt<br/>domain output<br/>[FareReceipt.java]"]
  node_ride_status(("Ride Status<br/>enum<br/>[RideStatus.java]"))
  node_vehicle_type(("Vehicle Type<br/>enum<br/>[VehicleType.java]"))
  node_id_generator["Id Generator<br/>[IdGenerator.java]"]
  node_constants["Constants<br/>shared config<br/>[Constants.java]"]
  node_no_driver["No Driver<br/>exception"]
end

subgraph group_data["Data"]
  node_rider_repo_iface[("Rider Repo<br/>repository interface")]
  node_rider_repo_impl[("Rider Repo Impl<br/>in-memory repository")]
  node_driver_repo_iface[("Driver Repo<br/>repository interface")]
  node_driver_repo_impl[("Driver Repo Impl<br/>in-memory repository")]
  node_location_registry[("Location Registry")]
end

subgraph group_policy["Policies"]
  node_ride_matching{{"Match Strategy<br/>strategy interface"}}
  node_nearest_strategy{{"Nearest Driver<br/>matching strategy"}}
  node_least_active_strategy{{"Least Active<br/>matching strategy"}}
  node_fare_strategy{{"Fare Strategy<br/>pricing interface<br/>[FareStrategy.java]"}}
  node_default_fare{{"Default Fare<br/>pricing strategy"}}
  node_peak_fare{{"Peak Fare<br/>pricing strategy"}}
end

node_main -->|"uses"| node_rider_service
node_main -->|"uses"| node_driver_service
node_main -->|"uses"| node_ride_service
node_rider_service -->|"depends on"| node_rider_repo_iface
node_rider_repo_iface -.->|"implemented by"| node_rider_repo_impl
node_driver_service -->|"depends on"| node_driver_repo_iface
node_driver_repo_iface -.->|"implemented by"| node_driver_repo_impl
node_ride_service -->|"reads"| node_driver_repo_iface
node_ride_service -->|"reads"| node_rider_repo_iface
node_ride_service -->|"uses"| node_location_registry
node_ride_service -->|"uses"| node_ride_matching
node_ride_service -->|"uses"| node_fare_strategy
node_ride_matching -.->|"implemented by"| node_nearest_strategy
node_ride_matching -.->|"implemented by"| node_least_active_strategy
node_fare_strategy -.->|"implemented by"| node_default_fare
node_fare_strategy -.->|"implemented by"| node_peak_fare
node_ride_service -->|"creates/updates"| node_ride
node_ride_service -->|"produces"| node_fare_receipt
node_ride -->|"references"| node_rider
node_ride -->|"references"| node_driver
node_ride -->|"uses"| node_location
node_ride -->|"uses"| node_ride_status
node_driver -->|"uses"| node_vehicle_type
node_ride_service -.->|"throws"| node_no_driver
node_rider_service -->|"uses"| node_id_generator
node_driver_service -->|"uses"| node_id_generator
node_ride_service -->|"uses"| node_id_generator
node_rider_service -->|"uses"| node_constants
node_driver_service -->|"uses"| node_constants
node_ride_service -->|"uses"| node_constants

click node_main "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/Main.java"
click node_rider_service "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RiderService.java"
click node_driver_service "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/DriverService.java"
click node_ride_service "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RideService.java"
click node_rider_repo_iface "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/RiderRepository.java"
click node_rider_repo_impl "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/RiderRepositoryImpl.java"
click node_driver_repo_iface "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/DriverRepository.java"
click node_driver_repo_impl "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/DriverRepositoryImpl.java"
click node_location_registry "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/LocationRegistry.java"
click node_ride_matching "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/RideMatchingStrategy.java"
click node_nearest_strategy "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/NearestDriverStrategy.java"
click node_least_active_strategy "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/LeastActiveDriverStrategy.java"
click node_fare_strategy "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/FareStrategy.java"
click node_default_fare "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/DefaultFareStrategy.java"
click node_peak_fare "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/PeakHourFareStrategy.java"
click node_ride "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Ride.java"
click node_driver "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Driver.java"
click node_rider "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Rider.java"
click node_location "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Location.java"
click node_fare_receipt "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/FareReceipt.java"
click node_ride_status "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/enums/RideStatus.java"
click node_vehicle_type "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/enums/VehicleType.java"
click node_id_generator "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/util/IdGenerator.java"
click node_constants "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/constants/Constants.java"
click node_no_driver "https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/exception/NoDriverAvailableException.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main toneBlue
class node_rider_service,node_driver_service,node_ride_service toneAmber
class node_ride,node_driver,node_rider,node_location,node_fare_receipt,node_ride_status,node_vehicle_type,node_id_generator,node_constants,node_no_driver toneMint
class node_rider_repo_iface,node_rider_repo_impl,node_driver_repo_iface,node_driver_repo_impl,node_location_registry toneRose
class node_ride_matching,node_nearest_strategy,node_least_active_strategy,node_fare_strategy,node_default_fare,node_peak_fare toneIndigo
```

## Components

### Entry

Console entrypoint and user interaction

- [Main](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/Main.java): cli entrypoint · Console menu and application bootstrap · `src/com/airtribe/ridewise/Main.java`

### Services

Application orchestration and business workflows

- [Rider Service](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RiderService.java): application service · Registers and manages riders · `src/com/airtribe/ridewise/service/RiderService.java`
- [Driver Service](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/DriverService.java): application service · Registers and manages drivers · `src/com/airtribe/ridewise/service/DriverService.java`
- [Ride Service](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/service/RideService.java): workflow service · Coordinates ride requests, matching, pricing, and lifecycle · `src/com/airtribe/ridewise/service/RideService.java`

### Domain

Core ride-sharing entities and enums

- [Ride](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Ride.java): domain aggregate · Trip lifecycle, assignments, and status · `src/com/airtribe/ridewise/model/Ride.java`
- [Driver](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Driver.java): domain entity · Driver availability and profile · `src/com/airtribe/ridewise/model/Driver.java`
- [Rider](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Rider.java): domain entity · Rider profile · `src/com/airtribe/ridewise/model/Rider.java`
- [Location](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/Location.java): value object · Coordinates and trip endpoints · `src/com/airtribe/ridewise/model/Location.java`
- [Fare Receipt](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/model/FareReceipt.java): domain output · Computed fare summary · `src/com/airtribe/ridewise/model/FareReceipt.java`
- [Ride Status](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/enums/RideStatus.java): enum · Ride lifecycle states · `src/com/airtribe/ridewise/enums/RideStatus.java`
- [Vehicle Type](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/enums/VehicleType.java): enum · Driver vehicle categories · `src/com/airtribe/ridewise/enums/VehicleType.java`
- [Id Generator](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/util/IdGenerator.java): utility · Unique ID generation · `src/com/airtribe/ridewise/util/IdGenerator.java`
- [Constants](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/constants/Constants.java): shared config · Shared configuration values · `src/com/airtribe/ridewise/constants/Constants.java`
- [No Driver](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/exception/NoDriverAvailableException.java): exception · Raised when matching fails · `src/com/airtribe/ridewise/exception/NoDriverAvailableException.java`

### Data

In-memory repositories and registries

- [Rider Repo](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/RiderRepository.java): repository interface · Rider persistence contract · `src/com/airtribe/ridewise/repository/RiderRepository.java`
- [Rider Repo Impl](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/RiderRepositoryImpl.java): in-memory repository · In-memory rider store · `src/com/airtribe/ridewise/repository/RiderRepositoryImpl.java`
- [Driver Repo](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/DriverRepository.java): repository interface · Driver persistence contract · `src/com/airtribe/ridewise/repository/DriverRepository.java`
- [Driver Repo Impl](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/DriverRepositoryImpl.java): in-memory repository · In-memory driver store · `src/com/airtribe/ridewise/repository/DriverRepositoryImpl.java`
- [Location Registry](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/repository/LocationRegistry.java): location registry · Tracks or resolves locations for matching · `src/com/airtribe/ridewise/repository/LocationRegistry.java`

### Policies

Pluggable ride matching and fare calculation

- [Match Strategy](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/RideMatchingStrategy.java): strategy interface · Driver selection contract · `src/com/airtribe/ridewise/strategy/RideMatchingStrategy.java`
- [Nearest Driver](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/NearestDriverStrategy.java): matching strategy · Chooses the closest available driver · `src/com/airtribe/ridewise/strategy/NearestDriverStrategy.java`
- [Least Active](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/LeastActiveDriverStrategy.java): matching strategy · Chooses the least active available driver · `src/com/airtribe/ridewise/strategy/LeastActiveDriverStrategy.java`
- [Fare Strategy](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/FareStrategy.java): pricing interface · Fare calculation contract · `src/com/airtribe/ridewise/strategy/FareStrategy.java`
- [Default Fare](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/DefaultFareStrategy.java): pricing strategy · Standard fare calculation · `src/com/airtribe/ridewise/strategy/DefaultFareStrategy.java`
- [Peak Fare](https://github.com/priyanka-pitla277/ridewise/blob/main/src/com/airtribe/ridewise/strategy/PeakHourFareStrategy.java): pricing strategy · Peak-hour fare calculation · `src/com/airtribe/ridewise/strategy/PeakHourFareStrategy.java`

## Connections

- Main → Rider Service: uses · CLI delegates rider actions
- Main → Driver Service: uses · CLI delegates driver actions
- Main → Ride Service: uses · CLI delegates ride actions
- Rider Service → Rider Repo: depends on · Rider workflow reads and writes rider state
- Rider Repo → Rider Repo Impl: implemented by · Repository contract backed by in-memory store
- Driver Service → Driver Repo: depends on · Driver workflow reads and writes driver state
- Driver Repo → Driver Repo Impl: implemented by · Repository contract backed by in-memory store
- Ride Service → Driver Repo: reads · Ride flow needs driver availability
- Ride Service → Rider Repo: reads · Ride flow resolves rider data
- Ride Service → Location Registry: uses · Ride flow resolves or tracks locations
- Ride Service → Match Strategy: uses · Ride flow selects a matching algorithm
- Ride Service → Fare Strategy: uses · Ride flow selects pricing logic
- Match Strategy → Nearest Driver: implemented by · Nearest-driver matching option
- Match Strategy → Least Active: implemented by · Least-active matching option
- Fare Strategy → Default Fare: implemented by · Standard pricing option
- Fare Strategy → Peak Fare: implemented by · Peak pricing option
- Ride Service → Ride: creates/updates · Owns ride lifecycle state
- Ride Service → Fare Receipt: produces · Returns fare summary after pricing
- Ride → Rider: references · Ride binds to rider
- Ride → Driver: references · Ride binds to driver
- Ride → Location: uses · Ride uses pickup and drop-off locations
- Ride → Ride Status: uses · Ride state transitions are constrained by enum
- Driver → Vehicle Type: uses · Driver profile includes vehicle category
- Ride Service → No Driver: throws · Failure when no eligible driver exists
- Rider Service → Id Generator: uses · Creates unique rider identifiers
- Driver Service → Id Generator: uses · Creates unique driver identifiers
- Ride Service → Id Generator: uses · Creates unique ride identifiers
- Rider Service → Constants: uses · Shared configuration for service logic
- Driver Service → Constants: uses · Shared configuration for service logic
- Ride Service → Constants: uses · Shared configuration for ride workflow
