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 = "Блюда были удалены из заказа" })); }
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 = "Блюда были успешно удалены" })); }