public override async Task <Payment> Pay(PaymentRequest request, ServerCallContext context) { var createdPayment = await _paymentRepository.CreatePayment(_mapper.Map <PaymentEntity>(request)); if (!createdPayment.Success) { throw new RpcException(new Status(StatusCode.InvalidArgument, createdPayment.Message)); } ProducerWrapper.ProduceAsync(_producerConfig, "handle-payment", createdPayment.Data); return(_mapper.Map <Payment>(createdPayment.Data)); throw new RpcException(new Status(StatusCode.OK, "In progress")); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using (var scope = _serviceScopeFactory.CreateScope()) { var _paymentRepository = scope.ServiceProvider.GetRequiredService <IPaymentRepository>(); await ConsumerWrapper.Consume(_consumerConfig, stoppingToken, "handle-payment", async (cr) => { var entity = JsonConvert.DeserializeObject <PaymentEntity>(cr.Message.Value); var payResult = await _paymentRepository.Pay(entity.Id); if (!payResult.Success) { var data = new PaymentSagaEntity(entity.Id, payResult.Message); ProducerWrapper.ProduceAsync(_producerConfig, "handle-payment-error", data); } }); } }