System Design: Multi-Level Parking Lot Service
Context
Design a production-grade parking lot system for a large, multi-level facility. The system should support multiple vehicle and spot types, multiple entry/exit gates, real-time availability, ticketing, payments, and pricing rules. Assume the system may operate across many lots and must remain available under concurrent use.
Requirements
-
Functional
-
Support multiple vehicle types (e.g., motorcycle, car, truck/van, EV) and spot types (compact, large, handicapped, EV-charging).
-
Support multiple levels and multiple entry/exit gates per lot.
-
Entry flow: issue ticket (or identify by license plate), assign or admit to a spot/group, start a parking session.
-
Exit flow: compute charges based on pricing rules (hourly, daily), accept payment, end session, open gate.
-
Real-time availability tracking by lot/level/spot type.
-
Handle failure scenarios: lost tickets, payment failures, network issues, and full capacity.
-
Non-functional
-
High availability and concurrency-safe spot allocation.
-
Data consistency for session state and payments; reasonable eventual consistency for availability counters.
-
Observability and auditability of financial transactions.
-
Deliverables
-
Define core classes/entities and their relationships.
-
Define key APIs for parking, un-parking, payments, and querying availability.
-
Address concurrency control, data consistency, failure handling, and full-capacity behavior.
-
Assumptions (make minimal, explicit choices if needed)
-
License plate recognition (LPR) is available but may be imperfect; tickets (QR/barcode) serve as fallback.
-
Option A: “Free parking” model where the driver selects a spot; Option B: “Assigned spot” model at entry. Design should support both; default to Option A for throughput, with optional assignment.
-
Pricing supports hourly and daily with configurable grace and rounding.