Appointment Scheduling with Google Calender API and Node JS
https://drive.google.com/open?id=1uOs53fzj0K4JadflYu-HjRHHpGLevwiK
*Note: Booking must be done after getting available timeslots (as per the requirements)
npm install
npm start
./credentials.js
port used currently: 8081
- All appointments are 40 minutes long and have fixed times, starting from 9–9:40 am
- Ensure there is always a 5 minutes break in between each appointment
- Appointments can only be booked during weekdays from 9 am to 6 pm
- Bookings can only be made at least 24 hours in advance
- Appointments cannot be booked in the past
- For simplicity, use UTC time for all bookings and days and ISO 8601 format for timeslots
Requires a year and month. Note that months must not be zero-indexed.
GET /days?year=yyyy&month=mm
Returns an array of all days in the specified month, each of which has the field hasTimeSlots, which is false if there are no time slots available, based on the requirements listed above.
{
"success": true,
"days": [
{ "day": 1, "hasTimeSlots": false },
...
{ "day": 31, "hasTimeSlots": true }
]
}
Requires a year, month, and day.
GET /timeslots?year=yyyy&month=mm&day=dd
Returns a list of all 40-minute time slots available for that day as an array of objects that contain a startTime and endTime in ISO 8601 format.
{
"success": true,
"timeSlots": [
{
"startTime": "2019-09-04T09:00:00.000Z",
"endTime": "2019-09-04T09:40:00.000Z"
},
{
"startTime": "2019-09-04T09:45:00.000Z",
"endTime": "2019-09-04T10:25:00.000Z"
},
...
]
}
Requires a year, month, day, hour, and minute.
POST /book?year=yyyy&month=MM&day=dd&hour=hh&minute=mm
Returns a boolean field success. If the booking was successful, also return startTime and endTime.
If not successful, return a message, a string for the error message.
// Success
{
"success": true,
"startTime": "2019-09-04T10:30:00.000Z",
"endTime": "2019-09-04T11:10:00.000Z"
}
// Fail
{
"success": false,
"message": "Invalid time slot"
}
- Invalid time slot: The time slot provided was not one of the time slots returned in the GET available time slots request
- Cannot book with less than 24 hours in advance
- Cannot book outside bookable timeframe: The time slot provided was not on a weekday between 9 am and 5 pm
- Cannot book time in the past
Error messages for ALL endpoints should be in this format:
{
"success": false,
"message": "Invalid time slot"
}
Where message contains the corresponding error message, such as Request is missing parameter: year