blob: d87b067e4ee594715905e287de609071d4d96a08 [file] [log] [blame]
/*
* Copyright 2018, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* HealthCheck method
* https://developers.google.com/maps-booking/reference/rest-api-v3/healthcheck-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function HealthCheck(requestBody) {
// TO-DO: add any additional server checks, e.g. database status
// ...
// Return a response similar to gRPC Health Check
// https://github.com/grpc/grpc/blob/master/doc/health-checking.md
var res = {status: 'SERVING'};
const responseBody = JSON.stringify(res);
return responseBody;
}
/**
* 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
* @return {string} HTTP response body
*/
function CheckAvailability(requestBody) {
// CheckAvailabilityRequest
// 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
// 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');
}
/**
* CreateBooking method
* https://developers.google.com/maps-booking/reference/rest-api-v3/createbooking-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function CreateBooking(requestBody) {
// CreateBookingRequest
// const req = JSON.parse(requestBody);
// TO-DO: validate req, e.g. (req.user_information !== null)
// TO-DO: add code to create a booking
// ...
// CreateBookingResponse
// 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');
}
/**
* UpdateBooking method
* https://developers.google.com/maps-booking/reference/rest-api-v3/updatebooking-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function UpdateBooking(requestBody) {
// UpdateBookingRequest
// 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
// 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');
}
/**
* GetBookingStatus method
* https://developers.google.com/maps-booking/reference/rest-api-v3/getbookingstatus-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function GetBookingStatus(requestBody) {
// GetBookingStatusRequest
// 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
// 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');
}
/**
* ListBookings method
* https://developers.google.com/maps-booking/reference/rest-api-v3/listbookings-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function ListBookings(requestBody) {
// ListBookingsRequest
// 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
// e.g
// var resp = {bookings: [{}]};
// const responseBody = JSON.stringify(resp);
// return responseBody;
throw new Error('Not implemented yet');
}
/**
* CheckOrderFulfillability method (Order-based Booking Server only)
* https://developers.google.com/maps-booking/reference/rest-api-v3/checkorderfulfillability-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function CheckOrderFulfillability(requestBody) {
// CheckOrderFulfillabilityRequest
// 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
// 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');
}
/**
* CreateOrder method (Order-based Booking Server only)
* https://developers.google.com/maps-booking/reference/rest-api-v3/createorder-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function CreateOrder(requestBody) {
// CreateOrderRequest
// 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
// 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');
}
/**
* ListOrders method (Order-based Booking Server only)
* https://developers.google.com/maps-booking/reference/rest-api-v3/listorders-method
* @param {string} requestBody - HTTP request body
* @return {string} HTTP response body
*/
function ListOrders(requestBody) {
// ListOrdersRequest
// 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
// 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.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;