updated to add BAL/Waitlist Functions
diff --git a/apiv3methods.js b/apiv3methods.js
index f135f4d..d87b067 100644
--- a/apiv3methods.js
+++ b/apiv3methods.js
@@ -46,6 +46,39 @@
}
/**
+ * BatchAvailabilityLookup method
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/batchavailabilitylookup-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function BatchAvailabilityLookup(requestBody) {
+ // BatchAvailabilityLookupRequest
+ // const req = JSON.parse(requestBody);
+ // TO-DO: validate req, e.g.
+ // (req.slot_time !== null && req.merchant_id !== null)
+ // TO-DO: add code to verify availability for all requested slots.
+ // ...
+ // BatchAvailabilityLookupResponse
+ // e.g
+ // var resp = {
+ // slot_time_availability: [
+ // {
+ // slot_time: {
+ // service_id: 5,
+ // start_sec: 50010430,
+ // duration_sec: 3600,
+ // availability_tag: ...
+ // }
+ // }
+ // ]
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
+}
+
+/**
* CheckAvailability method
* https://developers.google.com/maps-booking/reference/rest-api-v3/checkavailability-method
* @param {string} requestBody - HTTP request body
@@ -53,21 +86,24 @@
*/
function CheckAvailability(requestBody) {
// CheckAvailabilityRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g.
// (req.slot !== null && req.slot.merchant_id !== null)
// TO-DO: add code to verify the provided slot availability
// ...
// CheckAvailabilityResponse
- var resp = {
- slot: req.slot,
- count_available: 1,
- duration_requirement: 'DURATION_REQUIREMENT_UNSPECIFIED'
- // TO-DO: populate proper values and other fields, such as
- // availability_update
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // slot: req.slot,
+ // count_available: 1,
+ // duration_requirement: 'DURATION_REQUIREMENT_UNSPECIFIED'
+ // // TO-DO: populate proper values and other fields, such as
+ // // availability_update
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
/**
@@ -78,22 +114,24 @@
*/
function CreateBooking(requestBody) {
// CreateBookingRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. (req.user_information !== null)
// TO-DO: add code to create a booking
// ...
// CreateBookingResponse
- var resp = {
- booking: {
- booking_id: '1234',
- slot: req.slot,
- user_information: {user_id: req.user_information.user_id},
- payment_information: req.payment_information,
- status: 'CONFIRMED'
- }
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // booking: {
+ // booking_id: '1234',
+ // slot: req.slot,
+ // user_information: {user_id: req.user_information.user_id},
+ // payment_information: req.payment_information,
+ // status: 'CONFIRMED'
+ // }
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+ throw new Error('Not implemented yet');
}
/**
@@ -104,17 +142,20 @@
*/
function UpdateBooking(requestBody) {
// UpdateBookingRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g.
// (req.booking !== null && req.booking.booking_id !== null)
// TO-DO: add code to update the provided booking
// ...
// UpdateBookingResponse
- var resp = {
- booking: {booking_id: req.booking.booking_id, status: req.booking.status}
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // booking: {booking_id: req.booking.booking_id, status: req.booking.status}
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
/**
@@ -125,17 +166,20 @@
*/
function GetBookingStatus(requestBody) {
// GetBookingStatusRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. (req.booking_id !== null)
// TO-DO: add code to retrieve the booking status
// ...
// GetBookingStatusResponse
- var resp = {
- booking_id: req.booking_id,
- booking_status: 'BOOKING_STATUS_UNSPECIFIED'
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // booking_id: req.booking_id,
+ // booking_status: 'BOOKING_STATUS_UNSPECIFIED'
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
/**
@@ -146,15 +190,18 @@
*/
function ListBookings(requestBody) {
// ListBookingsRequest
- const req = JSON.parse(requestBody);
- console.log(`ListBookings() for user_id: ${req.user_id}`);
+ // const req = JSON.parse(requestBody);
+ // console.log(`ListBookings() for user_id: ${req.user_id}`);
// TO-DO: validate req, e.g. (req.user_id !== null)
// TO-DO: add code to fetch all bookings for the user_id
// ...
// ListBookingsResponse
- var resp = {bookings: [{}]};
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {bookings: [{}]};
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
@@ -166,23 +213,27 @@
*/
function CheckOrderFulfillability(requestBody) {
// CheckOrderFulfillabilityRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. (req.merchant_id !== null)
// TO-DO: add code to validate individual items and calculate the total price
// ...
// CheckOrderFulfillabilityResponse
- var resp = {
- fulfillability: {
- result: 'CAN_FULFILL',
- item_fulfillability: [{}] // individual item fullfilability
- },
- fees_and_taxes: {
- price_micros: 1000000, // total price in micros, e.g. 1USD = 1000000
- currency_code: 'USD'
- }
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // fulfillability: {
+ // result: 'CAN_FULFILL',
+ // item_fulfillability: [{}] // individual item fullfilability
+ // },
+ // fees_and_taxes: {
+ // price_micros: 1000000, // total price in micros, e.g. 1USD = 1000000
+ // currency_code: 'USD'
+ // }
+ // };
+ // const responseBody = JSON.stringify(resp);
+
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
/**
@@ -193,21 +244,24 @@
*/
function CreateOrder(requestBody) {
// CreateOrderRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. (req.user_information !== null)
// TO-DO: check for req.idempotency_token uniqueness
// TO-DO: create and process the order
// ...
// CreateOrderResponse
- var resp = {
- order: {
- order_id: '123', // new order id
- merchant_id: req.order.mercant_id,
- item: [{}] // populate individual LineItems, etc.
- }
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // order: {
+ // order_id: '123', // new order id
+ // merchant_id: req.order.mercant_id,
+ // item: [{}] // populate individual LineItems, etc.
+ // }
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
/**
@@ -218,27 +272,156 @@
*/
function ListOrders(requestBody) {
// ListOrdersRequest
- const req = JSON.parse(requestBody);
+ // const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. if ("user_id" in req || "order_ids" in req)
// TO-DO: fetch orders for req.user_id or a list of req.order_ids
// ...
// ListOrdersResponse
- var resp = {
- order: [{}] // populate all orders for the user_id or order_ids
- };
- const responseBody = JSON.stringify(resp);
- return responseBody;
+ // e.g
+ // var resp = {
+ // order: [{}] // populate all orders for the user_id or order_ids
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
}
+/**
+ * BatchGetWaitEstimates method (Waitlist Implementation only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/batchgetwaitestimates-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function BatchGetWaitEstimates(requestBody) {
+ // BatchGetWaitEstimatesRequest
+ // const req = JSON.parse(requestBody);
+ // TO-DO: validate req, e.g. if ("merchant_id" in req || "service_id" in req
+ // || "party_size" in req) TO-DO: fetch wait estimates for the relavent
+ // merchant, service id, and party size.
+ // ...
+ // BatchGetWaitEstimatesResponse
+ // e.g
+ // var resp = {
+ // waitlist_status: 'OPEN',
+ // wait_estimate: [
+ // {
+ // party_size: 5,
+ // wait_length: {
+ // parties_ahead_count: 5,
+ // estimated_seat_time_range: {
+ // start_seconds: 123456,
+ // end_seconds: 123456
+ // }
+ // },
+ // waitlist_confirmation_mode: 'WAITLIST_CONFIRMATION_MODE_SYNCHRONOUS'
+ // }
+ // ]
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
+}
+
+/**
+ * CreateWaitlistEntry method (Waitlist Implementation only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/createwaitlistentry-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function CreateWaitlistEntry(requestBody) {
+ // BatchGetWaitEstimatesRequest
+ // const req = JSON.parse(requestBody);
+ // TO-DO: validate req, e.g. if ("merchant_id" in req || "service_id" in req
+ // || "party_size" in req) TO-DO: create waitlist entry using data provided in
+ // request (merchant_id, service_id, )
+ // ...
+ // CreateWaitlistEntryResponse
+ // e.g
+ // var resp = {
+ // waitlist_entry_id: '1234', //if waitlist was created successfully
+ // waitlist_business_logic_failure: { // if waitlist entry creation failed
+ // cause: 'EXISTING_WAITLIST_ENTRY',
+ // description: 'lorem impsum'
+ // }
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
+}
+
+/**
+ * GetWaitlistEntry method (Waitlist Implementation only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/getwaitlistentry-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function GetWaitlistEntry(requestBody) {
+ // GetWaitlistEntryRequest
+ // const req = JSON.parse(requestBody);
+ // TO-DO: validate req, e.g. if ("waitlist_entry_id" in req)
+ // TO-DO: fetch wait list entry status from your system.
+ // ...
+ // GetWaitlistEntryResponse
+ // e.g
+ // var resp = {
+ // waitlist_entry: {
+ // waitlist_entry_state: 'CANCELED',
+ // waitlist_entry_state_times: {
+ // created_time_seconds: ,
+ // canceled_time_seconds:
+ // ...
+ // },
+ // wait_estimate: {
+ // party_size: 5,
+ // ...
+ // }
+ // }
+ // };
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
+}
+
+/**
+ * DeleteWaitlistEntry method (Waitlist Implementation only)
+ * https://developers.google.com/maps-booking/reference/rest-api-v3/waitlists/deletewaitlistentry-method
+ * @param {string} requestBody - HTTP request body
+ * @return {string} HTTP response body
+ */
+function DeleteWaitlistEntry(requestBody) {
+ // DeleteWaitlistEntryRequest
+ // const req = JSON.parse(requestBody);
+ // TO-DO: validate req, e.g. if ("waitlist_entry_id" in req)
+ // TO-DO: delete waitlist with relevant waitlist_entry_id
+ // ...
+ // empty response once deleted.
+ // e.g
+ // var resp = {
+ // }
+ // const responseBody = JSON.stringify(resp);
+ // return responseBody;
+
+ throw new Error('Not implemented yet');
+}
module.exports.HealthCheck = HealthCheck;
// Booking-flow Booking Server methods
+module.exports.BatchAvailabilityLookup = BatchAvailabilityLookup;
module.exports.CheckAvailability = CheckAvailability;
module.exports.CreateBooking = CreateBooking;
-module.exports.UpdateBooking = UpdateBooking;
module.exports.GetBookingStatus = GetBookingStatus;
module.exports.ListBookings = ListBookings;
+module.exports.UpdateBooking = UpdateBooking;
// Order-based Booking Server methods
module.exports.CheckOrderFulfillability = CheckOrderFulfillability;
module.exports.CreateOrder = CreateOrder;
module.exports.ListOrders = ListOrders;
+// Waitlist-based Server methods
+module.exports.BatchGetWaitEstimates = BatchGetWaitEstimates;
+module.exports.CreateWaitlistEntry = CreateWaitlistEntry;
+module.exports.DeleteWaitlistEntry = DeleteWaitlistEntry;
+module.exports.GetWaitlistEntry = GetWaitlistEntry;
\ No newline at end of file
diff --git a/bookingserver.js b/bookingserver.js
index 51d2f42..0a40ddc 100644
--- a/bookingserver.js
+++ b/bookingserver.js
@@ -117,6 +117,16 @@
} else if (method === 'POST') {
switch (path) {
// POST /v3/CheckAvailability/
+ case '/v3/batchavailabilitylookup':
+ try {
+ responseBody = apiv3.BatchAvailabilityLookup(requestBody);
+ } catch (e) {
+ // TO-DO: add a specific error handling if necessary
+ httpCode = 500; // Internal Server Error
+ console.log(`Error: ${e}`);
+ }
+ break;
+ // POST /v3/CheckAvailability/
case '/v3/checkavailability':
try {
responseBody = apiv3.CheckAvailability(requestBody);
@@ -199,6 +209,50 @@
console.log(`Error: ${e}`);
}
break;
+ // POST /v3/BatchGetWaitEstimates/
+ // (this method is only for Waitlist functionality)
+ case '/v3/batchgetwaitestimates':
+ try {
+ responseBody = apiv3.BatchGetWaitEstimates(requestBody);
+ } catch (e) {
+ // TO-DO: add a specific error handling if necessary
+ httpCode = 500; // Internal Server Error
+ console.log(`Error: ${e}`);
+ }
+ break;
+ // POST /v3/CreateWaitlistEntry/
+ // (this method is only for Waitlist functionality)
+ case '/v3/createwaitlistentry':
+ try {
+ responseBody = apiv3.CreateWaitlistEntry(requestBody);
+ } catch (e) {
+ // TO-DO: add a specific error handling if necessary
+ httpCode = 500; // Internal Server Error
+ console.log(`Error: ${e}`);
+ }
+ break;
+ // POST /v3/GetWaitlistEntry/
+ // (this method is only for Waitlist functionality)
+ case '/v3/getwaitlistentry':
+ try {
+ responseBody = apiv3.GetWaitlistEntry(requestBody);
+ } catch (e) {
+ // TO-DO: add a specific error handling if necessary
+ httpCode = 500; // Internal Server Error
+ console.log(`Error: ${e}`);
+ }
+ break;
+ // POST /v3/DeleteWaitlistEntry/
+ // (this method is only for Waitlist functionality)
+ case '/v3/deletewaitlistentry':
+ try {
+ responseBody = apiv3.DeleteWaitlistEntry(requestBody);
+ } catch (e) {
+ // TO-DO: add a specific error handling if necessary
+ httpCode = 500; // Internal Server Error
+ console.log(`Error: ${e}`);
+ }
+ break;
// some unknown request
default:
httpCode = 400; // Bad Request
@@ -216,4 +270,4 @@
server.listen(port, hostname, () => {
console.log(`Booking Server is running at ${hostname}:${port}`);
-});
+});
\ No newline at end of file