So I’ve made a booking app and nearly done. But, after seeing @Jeff_Hager response to @Roldy recent post, it made me wonder if my approach to my use case was efficient or it just works.
I’m interested to see how people would approach creating an app for booking services from multiple people for different services - and to see if what I created is overkill
Here is the criteria I worked with:
- Providers can list a number of services that can have different durations (30 min, 90 min, etc.)
- Providers can set their available hours per day of the week, so users can only book during those times (i.e. Shop A is open on weekdays from 9:00am - 5:00pm)
- Users can book multiple appointments but shouldn’t be able to double book a provider once a slot of time is taken (i.e. if Sally books with Shop A from 10:00am - 12:00pm, then Brooke can’t book anything with Shop A between that time, but can book before or after that appointment is finished
- Providers can also add buffer times in between appointments (Shop A wants an hour in between each appointment, so the earliest Brooke could book with Shop A is 1:00pm)
- Users can’t book with less than 24 hours notice
- Users can’t book more than 30 days out from the current day
I’ve accomplished the above by creating an “hours” column in 15 minute intervals and associating times and durations (i.e. 12:00am, 12:15am, 90 minutes etc.) to their decimal equivalent, then adding the decimal to the date a user selects. Once an appointment is made, a relation on the booking screen is made to check if appointments are on the same day that the current user has selected.
Times (or the decimal equivalent) that are in conflict with already made appointments will not show in a choice component where users select a time slot for booking an appointment.
There is also lengthy IFTHEN that also checks for other factors (if the time slot is during the shops hours, if the time slot is on a day the provider has marked not available, etc.).
I know many have created booking apps and apps that leverage date/time features in general. Curious if this method is overdone, or helpful, or confusing?!