System requirements


Functional:

List functional requirements for the system (Ask the chat bot for hints if stuck.)...

User registration and authentication

Manage vehicle entry, exit and parking.

Monitor the available space of parking lot

Payment system

Notification system

Admin Dashboard

Analytics and reports

Support mapping for users


Non-Functional:

List non-functional requirements for the system...

Performance

scalability

availability

security

usability

maintainable

interoperability

Data Integrity

Backup


Capacity estimation

Estimate the scale of the system you are going to design...






API design

Define what APIs are expected from the system...


register

PUT /v1/user/create/

GET /v1/user/

DELETE /v1/user/


Vehicle entry

PUT /v1/parking/


Vehicle exit

POST /v1/parking//leave


Available spaces

GET /v1/parking/space



Database design

Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...


user table

---------------

user id - int

user name - str

password - str

phone number - int

email - str

create time - timestamp


car table

---------------

car id - str

user id - int

plate number - str

car mode - str

car year - str

car size - str

create time - timestamp


parking lot table

---------------

parking lot id

status

update time


order table

--------------

order id

car id

parking lot id

status

start time

end time


history table

--------------

transaction id

parking id

order id

status





High-level design

You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...


see the diagram on the right




Request flows

Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...


  1. user creates a login with car info
  2. user books a parking lot
  3. user checks in the parking lot
  4. user checks out
  5. user makes payment
  6. notify user



Detailed component design

Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...


each component can scale independently



Trade offs/Tech choices

Explain any trade offs you have made and why you made certain tech choices...


need to avoid race condition. when a lot of users are booking, need to use transaction to occupy a parking lot. or use a redis cache to provide a lock



Failure scenarios/bottlenecks

Try to discuss as many failure scenarios/bottlenecks as possible.


make the database distributed

in a busy scenario, booking service



Future improvements

What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?