# arpitajana1220/parkinglot-design architecture

> Architecture diagram of the GitHub repository arpitajana1220/parkinglot-design, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arpitajana1220/parkinglot-design
- Repository: https://github.com/arpitajana1220/parkinglot-design

## Overview

This Java parking-lot system manages parking inventory and issues entry tickets. The main workflow starts with an application-simulated request, passes through a controller and ticket service, then looks up the gate and lot, obtains or creates vehicle data, allocates a compatible slot, and saves a ticket. The repository also models floors, gates, payments, and billing strategies; the README describes broader lot and slot management. The sampled code shows in-memory lot storage. Unsampled subsystems and billing behavior are represented only where documented or indexed.

Main entry points: [`parkinglot/src/services/TicketService.java`](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/services/TicketService.java) (Ticket service), [`parkinglot/src/controllers/TicketController.java`](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/controllers/TicketController.java) (Ticket controller), [`parkinglot/src/App/AppRunner.java`](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/App/AppRunner.java) (App runner), [`parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java`](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java) (Allocation factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_runner["App runner<br/>[AppRunner.java]"]
end

subgraph group_ticketing["Ticket issuance"]
  node_controller["Ticket controller"]
  node_request["Issue request"]
  node_response["Issue response"]
  node_service["Ticket service<br/>[TicketService.java]"]
end

subgraph group_allocation["Slot allocation"]
  node_factory["Allocation factory"]
  node_allocation_strategy["Allocation strategy"]
  node_simple_strategy["Simple allocator"]
end

subgraph group_domain["Parking domain"]
  node_ticket["Ticket<br/>[Ticket.java]"]
  node_vehicle["Vehicle<br/>[Vehicle.java]"]
  node_gate["Gate<br/>[Gate.java]"]
  node_lot["Parking lot<br/>[ParkingLot.java]"]
  node_floor["Parking floor<br/>[ParkingFloor.java]"]
  node_slot["Parking slot<br/>[ParkingSlot.java]"]
  node_billing["Billing and payment<br/>[Bill.java]"]
end

subgraph group_persistence["Repositories"]
  node_gate_repo[("Gate repository")]
  node_lot_repo[("Lot repository")]
  node_vehicle_repo[("Vehicle repository")]
  node_ticket_repo[("Ticket repository")]
end

node_user(("Request initiator"))

node_user -.->|"initiates"| node_runner
node_runner -->|"invokes"| node_controller
node_runner -->|"builds"| node_request
node_controller -->|"accepts"| node_request
node_controller -->|"calls"| node_service
node_controller -->|"returns"| node_response
node_service -->|"looks up gate"| node_gate_repo
node_service -->|"loads lot"| node_lot_repo
node_service -->|"looks up vehicle"| node_vehicle_repo
node_service -->|"saves ticket"| node_ticket_repo
node_service -->|"selects allocator"| node_factory
node_factory -->|"provides strategy"| node_allocation_strategy
node_factory -->|"selects implementation"| node_simple_strategy
node_simple_strategy -->|"loads lot"| node_lot_repo
node_service -->|"assembles"| node_ticket
node_service -->|"creates if absent"| node_vehicle
node_service -->|"requests allocation"| node_slot
node_service -->|"sets entry gate"| node_gate
node_simple_strategy -->|"chooses slot"| node_slot
node_lot -.->|"uses billing strategy"| node_billing
node_lot -.->|"contains floors"| node_floor
node_floor -.->|"contains slots"| node_slot

click node_runner "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/App/AppRunner.java"
click node_controller "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/controllers/TicketController.java"
click node_request "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/dtos/IssueTicketRequest.java"
click node_response "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/dtos/IssueTicketResponse.java"
click node_service "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/services/TicketService.java"
click node_ticket "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Ticket.java"
click node_vehicle "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Vehicle.java"
click node_gate "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Gate.java"
click node_lot "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingLot.java"
click node_floor "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingFloor.java"
click node_slot "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingSlot.java"
click node_billing "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Bill.java"
click node_gate_repo "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/GateRepository.java"
click node_lot_repo "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/ParkingLotRepository.java"
click node_vehicle_repo "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/VehicleRepository.java"
click node_ticket_repo "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/TicketRepository.java"
click node_factory "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java"
click node_allocation_strategy "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/ParkingPlaceAllotmentStrategy.java"
click node_simple_strategy "https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/SimpleParkingLotAllotmentStrategy.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_runner toneBlue
class node_controller,node_request,node_response,node_service toneAmber
class node_factory,node_allocation_strategy,node_simple_strategy,node_user toneMint
class node_ticket,node_vehicle,node_gate,node_lot,node_floor,node_slot,node_billing toneRose
class node_gate_repo,node_lot_repo,node_vehicle_repo,node_ticket_repo toneIndigo
```

## Components

### Application entry

- [App runner](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/App/AppRunner.java): `parkinglot/src/App/AppRunner.java`

### Ticket issuance

- [Ticket controller](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/controllers/TicketController.java): `parkinglot/src/controllers/TicketController.java`
- [Issue request](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/dtos/IssueTicketRequest.java): `parkinglot/src/dtos/IssueTicketRequest.java`
- [Issue response](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/dtos/IssueTicketResponse.java): `parkinglot/src/dtos/IssueTicketResponse.java`
- [Ticket service](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/services/TicketService.java): `parkinglot/src/services/TicketService.java`

### Slot allocation

- [Allocation factory](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java): `parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java`
- [Allocation strategy](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/ParkingPlaceAllotmentStrategy.java): `parkinglot/src/strategies/ParkingPlaceAllotmentStrategy.java`
- [Simple allocator](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/strategies/SimpleParkingLotAllotmentStrategy.java): `parkinglot/src/strategies/SimpleParkingLotAllotmentStrategy.java`

### Parking domain

- [Ticket](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Ticket.java): `parkinglot/src/models/Ticket.java`
- [Vehicle](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Vehicle.java): `parkinglot/src/models/Vehicle.java`
- [Gate](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Gate.java): `parkinglot/src/models/Gate.java`
- [Parking lot](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingLot.java): `parkinglot/src/models/ParkingLot.java`
- [Parking floor](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingFloor.java): `parkinglot/src/models/ParkingFloor.java`
- [Parking slot](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/ParkingSlot.java): `parkinglot/src/models/ParkingSlot.java`
- [Billing and payment](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/models/Bill.java): `parkinglot/src/models/Bill.java`

### Repositories

- [Gate repository](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/GateRepository.java): `parkinglot/src/repositories/GateRepository.java`
- [Lot repository](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/ParkingLotRepository.java): `parkinglot/src/repositories/ParkingLotRepository.java`
- [Vehicle repository](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/VehicleRepository.java): `parkinglot/src/repositories/VehicleRepository.java`
- [Ticket repository](https://github.com/arpitajana1220/parkinglot-design/blob/main/parkinglot/src/repositories/TicketRepository.java): `parkinglot/src/repositories/TicketRepository.java`

### Other components

- **Request initiator**

## Connections

- Request initiator → App runner: initiates
- App runner → Ticket controller: invokes (evidence: `parkinglot/src/App/AppRunner.java`)
- App runner → Issue request: builds (evidence: `parkinglot/src/App/AppRunner.java`)
- Ticket controller → Issue request: accepts (evidence: `parkinglot/src/controllers/TicketController.java`)
- Ticket controller → Ticket service: calls (evidence: `parkinglot/src/controllers/TicketController.java`)
- Ticket controller → Issue response: returns (evidence: `parkinglot/src/controllers/TicketController.java`)
- Ticket service → Gate repository: looks up gate (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Lot repository: loads lot (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Vehicle repository: looks up vehicle (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Ticket repository: saves ticket (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Allocation factory: selects allocator (evidence: `parkinglot/src/services/TicketService.java`)
- Allocation factory → Allocation strategy: provides strategy (evidence: `parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java`)
- Allocation factory → Simple allocator: selects implementation (evidence: `parkinglot/src/strategies/ParkingSlotAllotmentStrategyFactory.java`)
- Simple allocator → Lot repository: loads lot (evidence: `parkinglot/src/strategies/SimpleParkingLotAllotmentStrategy.java`)
- Ticket service → Ticket: assembles (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Vehicle: creates if absent (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Parking slot: requests allocation (evidence: `parkinglot/src/services/TicketService.java`)
- Ticket service → Gate: sets entry gate (evidence: `parkinglot/src/services/TicketService.java`)
- Simple allocator → Parking slot: chooses slot (evidence: `parkinglot/src/strategies/SimpleParkingLotAllotmentStrategy.java`)
- Parking lot → Billing and payment: uses billing strategy
- Parking lot → Parking floor: contains floors (evidence: `parkinglot/src/models/ParkingLot.java`)
- Parking floor → Parking slot: contains slots (evidence: `parkinglot/src/models/ParkingFloor.java`)
