blob: 9c96027b4484ee861a10d0ed12792eabca15d8a5 [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;
}
/**
* 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
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;
}
/**
* 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
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;
}
/**
* 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
var resp = {
booking: {booking_id: req.booking.booking_id, status: req.booking.status}
};
const responseBody = JSON.stringify(resp);
return responseBody;
}
/**
* 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
var resp = {
booking_id: req.booking_id,
booking_status: 'BOOKING_STATUS_UNSPECIFIED'
};
const responseBody = JSON.stringify(resp);
return responseBody;
}
/**
* 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
var resp = {bookings: {}};
const responseBody = JSON.stringify(resp);
return responseBody;
}
module.exports.HealthCheck = HealthCheck;
module.exports.CheckAvailability = CheckAvailability;
module.exports.CreateBooking = CreateBooking;
module.exports.UpdateBooking = UpdateBooking;
module.exports.GetBookingStatus = GetBookingStatus;
module.exports.ListBookings = ListBookings;