| <?php | |
| /* | |
| * Copyright 2019, 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() { | |
| // 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 | |
| $res['status'] = 'serving'; | |
| return json_encode($res); | |
| } | |
| /** | |
| * 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($request) { | |
| // CheckAvailabilityRequest | |
| $req = json_decode($request, true); | |
| // 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 | |
| $resp = [ | |
| 'slot' => $req['slot'], | |
| 'count_available' => 1, | |
| 'duration_requirement' => 'DURATION_REQUIREMENT_UNSPECIFIED' | |
| // TO-DO: populate proper values and other fields, such as | |
| // availability_update | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // CreateBookingRequest | |
| $req = json_decode($request, true); | |
| // TO-DO: validate req, e.g. (req.user_information !== null) | |
| // TO-DO: add code to create a booking | |
| // CreateBookingResponse | |
| $resp['booking'] = [ | |
| 'booking_id' => '1234', | |
| 'slot' => $req['slot'], | |
| 'user_information' => ['user_id' => $req['user_information']['user_id']], | |
| 'payment_information' => $req['payment_information'], | |
| 'status' => 'CONFIRMED' | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // UpdateBookingRequest | |
| $req = json_decode($request, true); | |
| // TO-DO: validate req, e.g. | |
| // (req.booking !== null && req.booking.booking_id !== null) | |
| // TO-DO: add code to update the provided booking | |
| // UpdateBookingResponse | |
| $resp['booking'] = [ | |
| 'booking_id' => $req['booking']['booking_id'], | |
| 'status' => $req['booking']['status'] | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // GetBookingStatusRequest | |
| $req = json_decode($request, true); | |
| // TO-DO: validate req, e.g. (req.booking_id !== null) | |
| // TO-DO: add code to retrieve the booking status | |
| // GetBookingStatusResponse | |
| $resp = [ | |
| 'booking_id' => $req['booking_id'], | |
| 'booking_status' => 'BOOKING_STATUS_UNSPECIFIED' | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // ListBookingsRequest | |
| $req = json_decode($request, true); | |
| // TO-DO: validate req, e.g. (req.user_id !== null) | |
| // TO-DO: add code to fetch all bookings for the user_id | |
| // ListBookingsResponse | |
| $resp = [ | |
| 'booking_id' => $req['booking_id'], | |
| 'booking_status' => 'BOOKING_STATUS_UNSPECIFIED' | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // CheckOrderFulfillabilityRequest | |
| // TO-DO: validate req, e.g. (req.merchant_id !== null) | |
| // TO-DO: add code to validate individual items and calculate the total price | |
| $req = json_decode($request, true); | |
| // CheckOrderFulfillabilityResponse | |
| $resp = [ | |
| 'fulfillability' => [ | |
| 'result' => 'CAN_FULFILL', | |
| 'item_fulfillability' => [] | |
| ], | |
| 'fees_and_taxes' => ['price_micros' => 1000000, 'currency_code' => 'USD'] | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // CreateOrderRequest | |
| $req = json_decode($request, true); | |
| // 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 | |
| $resp['order'] = [ | |
| 'order_id' => '1234', | |
| 'merchant_id' => $req['order']['merchant_id'], | |
| 'item' => [] | |
| ]; | |
| return json_encode($resp); | |
| } | |
| /** | |
| * 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($request) { | |
| // ListOrdersRequest | |
| $req = json_decode($request, true); | |
| // 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 | |
| $resp = [ | |
| 'order' => [] | |
| ]; | |
| return json_encode($resp); | |
| } | |