public async Task <IActionResult> Update([FromBody, CustomizeValidator] OrderToUpdate order, CancellationToken cancellationToken = default) { if (order is null || !ModelState.IsValid) { return(BadRequest(ModelState)); } try { var result = await _orderService.UpdateAsync(order, cancellationToken); return(result.IsError ? throw new InvalidOperationException(result.Message) : (IActionResult)Ok(result.Data)); } catch (InvalidOperationException ex) { Log.Error(ex, ex.Message); return(StatusCode(StatusCodes.Status500InternalServerError, new CustumResult() { Status = StatusCodes.Status500InternalServerError, Message = ex.Message })); } }
public async Task <Result <OrderView> > UpdateAsync(OrderToUpdate order, CancellationToken cancellationToken = default) { OrderDB orderForUpdate = await _context.Orders.Where(_ => _.Id == Guid.Parse(order.Id)).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken); if (DateTime.Now < orderForUpdate.UpdateTime.Value.AddMinutes(NumberСonstants.TIME_TO_CHANGE_ORDER_IN_MINUTES)) { orderForUpdate = _mapper.Map <OrderDB>(order); orderForUpdate.UpdateTime = DateTime.Now; _context.Entry(orderForUpdate).Property(c => c.Address).IsModified = true; _context.Entry(orderForUpdate).Property(c => c.PhoneNumber).IsModified = true; _context.Entry(orderForUpdate).Property(c => c.Name).IsModified = true; _context.Entry(orderForUpdate).Property(c => c.Surname).IsModified = true; _context.Entry(orderForUpdate).Property(c => c.UpdateTime).IsModified = true; try { await _context.SaveChangesAsync(); OrderDB orderAfterUpdate = await _context.Orders.Where(_ => _.Id == orderForUpdate.Id).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken); var dishList = await _context.BasketDishes.IgnoreQueryFilters().Where(_ => _.OrderId == orderAfterUpdate.Id).AsNoTracking().ToListAsync(cancellationToken); OrderView view = CollectOrderView(orderAfterUpdate).Result.Data; return(Result <OrderView> .Ok(view)); } catch (DbUpdateConcurrencyException ex) { return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.CANNOT_UPDATE_MODEL + ex.Message)); } catch (DbUpdateException ex) { return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.CANNOT_UPDATE_MODEL + ex.Message)); } } else { return(Result <OrderView> .Quite <OrderView>(NotificationConstans.TIME_IS_OVER)); } }