user can select the parking lot and position
user can purchase the ticket with time limit
admin can verify if the car is paid for parking
scale up as more parking lot over the world uses the system
consistency and stable
if each parking lot we have roughly 100 spot and we have 10 parking lot in the world. each spot will have 5 car each day. we will have 100 * 10 * 5 records of data stored in DB, which is 5000 * 365 per year.
POST /park/{parkinglot#}/{spot#} request (vehicle plate#, valid time)
GET /verify/{parkinglot#}/{spot#} request (vehicle plate#)
table Record, schema: recordId, createdAt, parkinglot#, spot#, ticketId
table Ticket, schema: ticketId, vehiclePlate, createdAt, expairedAt, paymentId
table Payment, schema: paymentId, amount, currency, createdAt, agent
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...
when user purchase the ticket, will create the payment first with calculated amount, then create ticket with valid time to set expiredAt. Then create the record.
when admin to check if the vehicle purchase the ticket, join Record and Ticket table and using the parkinglot#, spot# and vehicle plate to find the latest purchase. If the expired date is before now, it does not have valid ticket, vise versa
when scale up, since most parking lots are located all around of the world, and unlikely the user in Canada will use the Asian parking lot very often. So we can scale horizontally for the SQL DB, and no need to connect all dbs, the server in each area will connect to it's own DB. So we can replicate this server and deploy to all over the world but data is not connected.
I assume the extentions will located all around the world
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?