public async Task <GetOfferHasOrdersResponse> GetOfferHasOrders(GetOfferHasOrdersRequest request) { var offerHasOrders = await _orderRepository.GetOfferHasAnyOrders(request.OfferId); return(new GetOfferHasOrdersResponse { OfferHasOrders = offerHasOrders }); }
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); }