Пример #1
0
        public async Task <GetOfferHasOrdersResponse> GetOfferHasOrders(GetOfferHasOrdersRequest request)
        {
            var offerHasOrders = await _orderRepository.GetOfferHasAnyOrders(request.OfferId);

            return(new GetOfferHasOrdersResponse
            {
                OfferHasOrders = offerHasOrders
            });
        }
Пример #2
0
        public async Task <Unit> Handle(RemoveOfferCommand request, CancellationToken cancellationToken)
        {
            var offerId = Guid.Parse(request.OfferId);
            var offer   = await _offerRepository.GetByIdAsync(offerId);

            if (offer == null)
            {
                throw new NotFoundException();
            }

            var userClaims = _httpContext.User.Claims.ToTokenPayload().UserClaims;
            var userId     = userClaims.Id;
            var adminRoles = new List <string> {
                "ADMIN", "SUPER_ADMIN"
            };

            if (offer.OwnerId != userId && !adminRoles.Contains(userClaims.Role))
            {
                throw new ForbiddenException();
            }

            var ordersServiceClient = _ordersServiceClientFactory.Create(_endpointsConfig.Orders.Grpc.ToString());
            var grpcRequest         = new GetOfferHasOrdersRequest {
                OfferId = offerId
            };
            var grpcResponse = await ordersServiceClient.GetOfferHasOrders(grpcRequest);

            if (grpcResponse.OfferHasOrders)
            {
                throw new OffersDomainException("Offer cannot be cancelled because it's related to at least one order");
            }

            offer.MarkAsRemoved();

            _offerRepository.Update(offer);
            await _offerRepository.UnitOfWork.SaveChangesAndDispatchDomainEventsAsync(cancellationToken);

            return(await Unit.Task);
        }