public async Task <ApiResponse <Order> > CreateOrder(string userId, string restaurantOwnerId, OrderPostRequest req, double total) { List <StatusHistoryItem> statusHistoryItems = new List <StatusHistoryItem>(); statusHistoryItems.Add(new StatusHistoryItem { Status = OrderStatuses.PLACED, Date = Utils.GetDateEpoch() }); Order order = new Order { UserId = userId, RestaurantOwnerId = restaurantOwnerId, Date = Utils.GetDateEpoch(), Items = req.Items, RestaurantId = req.RestaurantId, Status = new OrderStatus { CurrentStatus = OrderStatuses.PLACED, StatusHistory = statusHistoryItems }, TotalPrice = total }; string ser = JsonConvert.SerializeObject(order, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); var jsonObject = Utils.Deserialize(ser); try { var queryResult = await _firebaseService.GetFirestoreDb().Collection(TableNames.ORDERS).AddAsync(jsonObject); var key = queryResult.Id; order.OrderId = key; return(new ApiResponse <Order> { Success = true, Data = order }); } catch { return(new ApiResponse <Order> { Success = false, ErrorCode = ErrorCodes.UNKNOWN_ERROR }); } }
public async Task <IActionResult> PostOrder([FromBody] OrderPostRequest req) { if (req.RestaurantId == null || req.Items == null || req.Items.Count == 0) { return(BadRequest(new ApiResponse { Success = false, ErrorCode = ErrorCodes.MISSING_FIELD, })); } foreach (var item in req.Items) { if (item.FoodId == null || item.Quantity == null) { return(BadRequest(new ApiResponse { Success = false, ErrorCode = ErrorCodes.MISSING_FIELD, })); } } if (!Role.Equals(UserRoles.USER)) { return(Forbid()); } var res = await _restaurantService.GetRestaurant(req.RestaurantId); if (!res.Success) { return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } if (res.Data == null) { return(BadRequest(new ApiResponse { Success = false, ErrorCode = ErrorCodes.ORDER_INVALID_RESTAURANT_ID, })); } var r = await _restaurantService.IsBlocked(UserId, req.RestaurantId); if (!r.Success) { return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } if (r.Data) { return(Forbid()); } var foodsResponse = await _restaurantService.GetAllFood(req.RestaurantId); if (!foodsResponse.Success) { return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } var foods = foodsResponse.Data; double total = 0; foreach (OrderItem o in req.Items) { if (o.Quantity <= 0) { return(BadRequest(new ApiResponse { Success = false, ErrorCode = ErrorCodes.ORDER_FOOD_INVALID_QUANTITY, })); } Food f = foods.FirstOrDefault(x => x.Id == o.FoodId); if (f == null) { return(BadRequest(new ApiResponse { Success = false, ErrorCode = ErrorCodes.ORDER_INVALID_FOOD_ID, })); } else { total += f.Price * (int)o.Quantity; } } var result = await _orderService.CreateOrder(UserId, res.Data.OwnerId, req, total); if (!result.Success) { return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } return(CreatedAtAction(nameof(GetOrder), new { orderId = result.Data.OrderId }, result)); }