Esempio n. 1
0
        public async Task <IActionResult> DeleteMealFromOrder([FromBody] DeleteMealOrderModel model)
        {
            var order = await _context.Orders.FirstOrDefaultAsync(o => o.Id == model.OrderId);

            if (order == null)
            {
                return(NotFound(new { status = "error", message = "Заказ не был найден" }));
            }
            if (model.MealOrders.Count == 0)
            {
                return(BadRequest(new { status = "error", message = "Список блюд не может быть пустым" }));
            }
            if (GetUserId() != order.UserId)
            {
                return(BadRequest(new { status = "error", message = "Вы можете удалять блюда только из своего заказа" }));
            }
            foreach (var item in model.MealOrders)
            {
                if (MealIsNull(item.MealId))
                {
                    return(NotFound(new { status = "error", message = "Блюда не были найдены в базе данных" }));
                }
                var mealOrder = _context.MealOrders.FirstOrDefault(mo => mo.OrderId == order.Id && mo.MealId == item.MealId);
                if (mealOrder == null)
                {
                    return(NotFound(new { status = "error", message = $"Блюдо {item.MealId} в заказе с id {order.Id} не существует" }));
                }
                if (mealOrder.MealOrderStatus == MealOrderStatus.NotReady)
                {
                    if (mealOrder.OrderedQuantity == item.DeleteQuantity)
                    {
                        _context.MealOrders.Remove(mealOrder);
                    }
                    else if (mealOrder.OrderedQuantity > item.DeleteQuantity)
                    {
                        mealOrder.OrderedQuantity -= item.DeleteQuantity;
                    }
                    else if (mealOrder.OrderedQuantity < item.DeleteQuantity)
                    {
                        return(BadRequest(new { status = "error", message = "Количество удаляемых порций не может быть выше чем количество заказанных" }));
                    }
                    if (mealOrder.OrderedQuantity <= mealOrder.FinishedQuantity)
                    {
                        mealOrder.MealOrderStatus = MealOrderStatus.Ready;
                    }
                    else
                    {
                        mealOrder.MealOrderStatus = MealOrderStatus.NotReady;
                    }
                }
                else
                {
                    return(BadRequest(new { status = "error", message = "Вы не можете удалять порции из готовых блюд или замороженных" }));
                }
            }
            _context.Entry(order).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(Ok(new { status = "success", message = "Блюда были удалены из заказа" }));
        }
Esempio n. 2
0
        public async Task <IActionResult> DeleteMealFromOrder([FromBody] DeleteMealOrderModel model)
        {
            var order = await _context.Orders.FirstOrDefaultAsync(o => o.Id == model.OrderId);

            if (order == null)
            {
                return(NotFound(new { status = "error", message = "Заказ не был найден" }));
            }
            foreach (var item in model.MealOrders)
            {
                var meal = await _context.Meals.FirstOrDefaultAsync(m => m.Id == item.MealId);

                if (meal == null)
                {
                    return(NotFound(new { status = "error", message = "Блюдо не было найдено в базе данных" }));
                }

                var mealOrder = _context.MealOrders.FirstOrDefault(mo => mo.OrderId == order.Id && mo.MealId == item.MealId);

                if (mealOrder == null)
                {
                    return(NotFound(new { status = "error", message = $"Блюда с Id:{item.MealId} нет в заказе:{order.Id}" }));
                }
                if (mealOrder.MealOrderStatus == MealOrderStatus.Ready)
                {
                    if (mealOrder.OrderedQuantity == item.DeleteQuantity)
                    {
                        _context.MealOrders.Remove(mealOrder);
                    }
                    else if (mealOrder.OrderedQuantity > item.DeleteQuantity)
                    {
                        mealOrder.OrderedQuantity -= item.DeleteQuantity;
                    }
                    else if (mealOrder.OrderedQuantity < item.DeleteQuantity)
                    {
                        return(BadRequest(new { status = "error", message = "Количество удаляемых порций не может быть больше количества заказанных" }));
                    }
                    if (mealOrder.OrderedQuantity <= mealOrder.FinishedQuantity)
                    {
                        mealOrder.MealOrderStatus = MealOrderStatus.Ready;
                    }
                    else
                    {
                        mealOrder.MealOrderStatus = MealOrderStatus.NotReady;
                    }
                }
                else
                {
                    return(BadRequest(new { status = "error", message = "This method can't delete meal from not ready or freezed MealOrder" }));
                }
            }
            _context.Entry(order).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(Ok(new { status = "success", message = "Блюда были успешно удалены" }));
        }