public APIGatewayProxyResponseEvent handleRequest()

in DeliveryApi/ApiHandlers/src/com/ilmlf/delivery/api/handlers/BookDelivery.java [72:124]


  public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {
    Integer httpStatus;
    String returnVal;
    Integer farmId;
    Integer slotId;
    Integer userId;
    JSONObject jsonObjDelivery;

    try {
      farmId = Integer.parseInt(event.getPathParameters().get("farm-id"));
      slotId = Integer.parseInt(event.getPathParameters().get("slot-id"));

      String body = event.getBody();
      JSONObject bodyJson = new JSONObject(body);
      Object userIdInJson = bodyJson.get("userId");
      if (!(userIdInJson instanceof Integer)) {
        metricsLogger.putMetric("InvalidUserId", 1, Unit.COUNT);
        throw new JSONException("userId must be an integer");
      }
      userId = (Integer) userIdInJson;

      Delivery delivery = slotService.bookDelivery(farmId, slotId, userId);
      jsonObjDelivery = new JSONObject(delivery);
      httpStatus = 200;
      returnVal = jsonObjDelivery.toString();
      metricsLogger.putMetric("DeliveryBooked", 1, Unit.COUNT);

    } catch (NumberFormatException exception) {
      logger.error(exception.getMessage(), exception);
      httpStatus = 400;
      returnVal = HandlerErrorMessage.FARM_AND_SLOT_INVALID.toString();
      metricsLogger.putMetric("FarmAndSlotInvalid", 1, Unit.COUNT);
    } catch (JSONException exception) {
      logger.error(exception.getMessage(), exception);
      httpStatus = 400;
      returnVal = HandlerErrorMessage.USER_INVALID.toString();
      metricsLogger.putMetric("InvalidUserId", 1, Unit.COUNT);
    } catch (SQLException exception) {
      logger.error(exception.getMessage(), exception);
      httpStatus = 500;
      returnVal = HandlerErrorMessage.SQL_FAILED.toString();
      metricsLogger.putMetric("SqlException", 1, Unit.COUNT);
    } catch (IllegalStateException exception) {
      logger.error(exception.getMessage(), exception);
      httpStatus = 500;
      returnVal = HandlerErrorMessage.NO_AVAILABLE_DELIVERY.toString();
      metricsLogger.putMetric("NoAvailableDelivery", 1, Unit.COUNT);
    }

    metricsLogger.flush();

    return ApiUtil.generateReturnData(httpStatus, returnVal);
  }