Exemplo n.º 1
0
        public async Task <IActionResult> PutAsync(Guid id, [FromBody] OrderEditRequest request, CancellationToken cancellationToken)
        {
            var phoneNumber = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            request.PhoneNumber = phoneNumber;
            request.Id          = id;
            var responseModel = await this.mediator.Send(request, cancellationToken);

            return(new CustomActionResult(responseModel));
        }
        public async Task <OrderEditResponse> Edit(OrderEditRequest request)
        {
            var order = await _orderDataService.Query.Include(x => x.Shipment).FirstAsync(x => x.Id == request.Id);

            bool hasShipment = order.Shipment != null;

            if (!AccessManager.HasAccess(order, AccessPremission.See))
            {
                _securityLogger.LogDangeriousUpdateAttemp(request.RequestOwner, order);
                return(new OrderEditResponse()
                {
                    Access = ResponseAccess.Deny
                });
            }
            _orderLogger.OrderUpdated(order, request.Model.MapToModel());
            request.Model.MapToExisting(order);
            await BaseBeforeUpdateAsync(order, request.RequestOwner);

            if (order.ShippingStatus == ShippingStatus.Delivered && order.PaymentStatus == PaymentStatus.Paid)
            {
                order.OrderStatus = OrderStatus.Complete;
            }
            else
            {
                order.OrderStatus = OrderStatus.Pending;
            }

            _unitOfWork.Update(order);
            await BaseAfterUpdateAsync(order, request.RequestOwner);

            await _unitOfWork.SaveChangesAsync();

            return(new OrderEditResponse()
            {
                Access = ResponseAccess.Granted,
                Logs = _orderLogDataService.Query.Include(x => x.Creator).Where(x => x.OrderId == order.Id).ToList().MapToViewModel()
            });
        }