Example #1
0
        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
                });
            }
        }
Example #2
0
        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));
        }