Browse Source

Updated to resolvers

pull/57/head
Galip Tolga Erdem 4 years ago
parent
commit
e3acd376b5
  1. 10
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentRequests/PaymentRequestAppService.cs
  2. 10
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServiceApplicationModule.cs
  3. 11
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/DemoPaymentMethod.cs
  4. 3
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/IPaymentMethod.cs
  5. 31
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaymentMethodResolver.cs
  6. 30
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaymentServiceFactory.cs
  7. 8
      services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaypalMethod.cs

10
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentRequests/PaymentRequestAppService.cs

@ -10,7 +10,7 @@ namespace EShopOnAbp.PaymentService.PaymentRequests
{
public class PaymentRequestAppService : PaymentServiceAppService, IPaymentRequestAppService
{
private readonly PaymentServiceFactory _paymentServiceFactory;
private readonly PaymentMethodResolver _paymentMethodResolver;
private readonly PaymentRequestDomainService _paymentRequestDomainService;
protected IPaymentRequestRepository PaymentRequestRepository { get; }
protected PayPalHttpClient PayPalHttpClient { get; }
@ -18,12 +18,12 @@ namespace EShopOnAbp.PaymentService.PaymentRequests
public PaymentRequestAppService(
IPaymentRequestRepository paymentRequestRepository,
PayPalHttpClient payPalHttpClient,
PaymentServiceFactory paymentServiceFactory,
PaymentMethodResolver paymentMethodResolver,
PaymentRequestDomainService paymentRequestDomainService)
{
PaymentRequestRepository = paymentRequestRepository;
PayPalHttpClient = payPalHttpClient;
_paymentServiceFactory = paymentServiceFactory;
_paymentMethodResolver = paymentMethodResolver;
_paymentRequestDomainService = paymentRequestDomainService;
}
@ -56,13 +56,13 @@ namespace EShopOnAbp.PaymentService.PaymentRequests
PaymentRequest paymentRequest =
await PaymentRequestRepository.GetAsync(input.PaymentRequestId, includeDetails: true);
var paymentService = _paymentServiceFactory.Create(input.PaymentTypeId);
var paymentService = _paymentMethodResolver.Resolve(input.PaymentTypeId);
return await paymentService.StartAsync(paymentRequest, input);
}
public virtual async Task<PaymentRequestDto> CompleteAsync(PaymentRequestCompleteInputDto input)
{
var paymentService = _paymentServiceFactory.Create(input.PaymentTypeId);
var paymentService = _paymentMethodResolver.Resolve(input.PaymentTypeId);
var paymentRequest = await paymentService.CompleteAsync(PaymentRequestRepository, input.Token);
return ObjectMapper.Map<PaymentRequest, PaymentRequestDto>(paymentRequest);

10
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServiceApplicationModule.cs

@ -8,6 +8,7 @@ using PayPalCheckoutSdk.Core;
using System;
using EShopOnAbp.PaymentService.PaymentRequests;
using EShopOnAbp.PaymentService.PaymentServices;
using Microsoft.Extensions.Logging;
namespace EShopOnAbp.PaymentService
{
@ -16,7 +17,7 @@ namespace EShopOnAbp.PaymentService
typeof(PaymentServiceApplicationContractsModule),
typeof(AbpDddApplicationModule),
typeof(AbpAutoMapperModule)
)]
)]
public class PaymentServiceApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
@ -40,6 +41,11 @@ namespace EShopOnAbp.PaymentService
return new PayPalHttpClient(new LiveEnvironment(options.ClientId, options.Secret));
});
context.Services.AddTransient<PaymentMethodResolver>(provider => new PaymentMethodResolver(
provider.GetServices<IPaymentMethod>(),
provider.GetRequiredService<ILogger<PaymentMethodResolver>>()
));
}
}
}
}

11
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/DemoService.cs → services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/DemoPaymentMethod.cs

@ -5,9 +5,16 @@ using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.PaymentService.PaymentServices;
[ExposeServices(typeof(IPaymentStrategy), typeof(DemoService))]
public class DemoService : IPaymentStrategy
[ExposeServices(typeof(IPaymentMethod), typeof(DemoPaymentMethod))]
public class DemoPaymentMethod : IPaymentMethod
{
public int PaymentTypeId { get; }
public DemoPaymentMethod()
{
PaymentTypeId = 0;
}
public Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, PaymentRequestStartDto input)
{
return Task.FromResult(new PaymentRequestStartResultDto

3
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/IPaymentStrategy.cs → services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/IPaymentMethod.cs

@ -4,8 +4,9 @@ using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.PaymentService.PaymentServices;
public interface IPaymentStrategy : ITransientDependency
public interface IPaymentMethod : ITransientDependency
{
public int PaymentTypeId { get; }
public Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, PaymentRequestStartDto input);
public Task<PaymentRequest> CompleteAsync(IPaymentRequestRepository paymentRequestRepository, string token);
}

31
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaymentMethodResolver.cs

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.PaymentService.PaymentServices;
public class PaymentMethodResolver : ITransientDependency
{
private readonly IEnumerable<IPaymentMethod> _paymentMethods;
private readonly ILogger<PaymentMethodResolver> _logger;
public PaymentMethodResolver(IEnumerable<IPaymentMethod> paymentMethods, ILogger<PaymentMethodResolver> logger)
{
_paymentMethods = paymentMethods;
_logger = logger;
}
public IPaymentMethod Resolve(int paymentTypeId)
{
IPaymentMethod paymentMethod = _paymentMethods.FirstOrDefault(q => q.PaymentTypeId == paymentTypeId);
if (paymentMethod == null)
{
_logger.LogError($"Couldn't find Payment method with id:{paymentTypeId}");
throw new ArgumentException("Payment method not found", paymentTypeId.ToString());
}
return paymentMethod;
}
}

30
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaymentServiceFactory.cs

@ -1,30 +0,0 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.PaymentService.PaymentServices;
public class PaymentServiceFactory : ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
public PaymentServiceFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IPaymentStrategy Create(int paymentTypeId)
{
if (paymentTypeId == 0)
{
return _serviceProvider.GetRequiredService<DemoService>();
}
if (paymentTypeId == 1)
{
return _serviceProvider.GetRequiredService<PaypalService>();
}
return _serviceProvider.GetRequiredService<DemoService>();
}
}

8
services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaypalService.cs → services/payment/src/EShopOnAbp.PaymentService.Application/PaymentServices/PaypalMethod.cs

@ -10,16 +10,18 @@ using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.PaymentService.PaymentServices;
[ExposeServices(typeof(IPaymentStrategy), typeof(PaypalService))]
public class PaypalService : IPaymentStrategy
[ExposeServices(typeof(IPaymentMethod), typeof(PaypalMethod))]
public class PaypalMethod : IPaymentMethod
{
private readonly PayPalHttpClient _payPalHttpClient;
private readonly PaymentRequestDomainService _paymentRequestDomainService;
public int PaymentTypeId { get; }
public PaypalService(PayPalHttpClient payPalHttpClient, PaymentRequestDomainService paymentRequestDomainService)
public PaypalMethod(PayPalHttpClient payPalHttpClient, PaymentRequestDomainService paymentRequestDomainService)
{
_payPalHttpClient = payPalHttpClient;
_paymentRequestDomainService = paymentRequestDomainService;
PaymentTypeId = 1;
}
public async Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest,
Loading…
Cancel
Save