Browse Source

Updated to resolvers

pull/57/head
Galip Tolga Erdem 5 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 public class PaymentRequestAppService : PaymentServiceAppService, IPaymentRequestAppService
{ {
private readonly PaymentServiceFactory _paymentServiceFactory; private readonly PaymentMethodResolver _paymentMethodResolver;
private readonly PaymentRequestDomainService _paymentRequestDomainService; private readonly PaymentRequestDomainService _paymentRequestDomainService;
protected IPaymentRequestRepository PaymentRequestRepository { get; } protected IPaymentRequestRepository PaymentRequestRepository { get; }
protected PayPalHttpClient PayPalHttpClient { get; } protected PayPalHttpClient PayPalHttpClient { get; }
@ -18,12 +18,12 @@ namespace EShopOnAbp.PaymentService.PaymentRequests
public PaymentRequestAppService( public PaymentRequestAppService(
IPaymentRequestRepository paymentRequestRepository, IPaymentRequestRepository paymentRequestRepository,
PayPalHttpClient payPalHttpClient, PayPalHttpClient payPalHttpClient,
PaymentServiceFactory paymentServiceFactory, PaymentMethodResolver paymentMethodResolver,
PaymentRequestDomainService paymentRequestDomainService) PaymentRequestDomainService paymentRequestDomainService)
{ {
PaymentRequestRepository = paymentRequestRepository; PaymentRequestRepository = paymentRequestRepository;
PayPalHttpClient = payPalHttpClient; PayPalHttpClient = payPalHttpClient;
_paymentServiceFactory = paymentServiceFactory; _paymentMethodResolver = paymentMethodResolver;
_paymentRequestDomainService = paymentRequestDomainService; _paymentRequestDomainService = paymentRequestDomainService;
} }
@ -56,13 +56,13 @@ namespace EShopOnAbp.PaymentService.PaymentRequests
PaymentRequest paymentRequest = PaymentRequest paymentRequest =
await PaymentRequestRepository.GetAsync(input.PaymentRequestId, includeDetails: true); 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); return await paymentService.StartAsync(paymentRequest, input);
} }
public virtual async Task<PaymentRequestDto> CompleteAsync(PaymentRequestCompleteInputDto 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); var paymentRequest = await paymentService.CompleteAsync(PaymentRequestRepository, input.Token);
return ObjectMapper.Map<PaymentRequest, PaymentRequestDto>(paymentRequest); 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 System;
using EShopOnAbp.PaymentService.PaymentRequests; using EShopOnAbp.PaymentService.PaymentRequests;
using EShopOnAbp.PaymentService.PaymentServices; using EShopOnAbp.PaymentService.PaymentServices;
using Microsoft.Extensions.Logging;
namespace EShopOnAbp.PaymentService namespace EShopOnAbp.PaymentService
{ {
@ -16,7 +17,7 @@ namespace EShopOnAbp.PaymentService
typeof(PaymentServiceApplicationContractsModule), typeof(PaymentServiceApplicationContractsModule),
typeof(AbpDddApplicationModule), typeof(AbpDddApplicationModule),
typeof(AbpAutoMapperModule) typeof(AbpAutoMapperModule)
)] )]
public class PaymentServiceApplicationModule : AbpModule public class PaymentServiceApplicationModule : AbpModule
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
@ -40,6 +41,11 @@ namespace EShopOnAbp.PaymentService
return new PayPalHttpClient(new LiveEnvironment(options.ClientId, options.Secret)); 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; namespace EShopOnAbp.PaymentService.PaymentServices;
[ExposeServices(typeof(IPaymentStrategy), typeof(DemoService))] [ExposeServices(typeof(IPaymentMethod), typeof(DemoPaymentMethod))]
public class DemoService : IPaymentStrategy public class DemoPaymentMethod : IPaymentMethod
{ {
public int PaymentTypeId { get; }
public DemoPaymentMethod()
{
PaymentTypeId = 0;
}
public Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, PaymentRequestStartDto input) public Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, PaymentRequestStartDto input)
{ {
return Task.FromResult(new PaymentRequestStartResultDto 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; 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<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, PaymentRequestStartDto input);
public Task<PaymentRequest> CompleteAsync(IPaymentRequestRepository paymentRequestRepository, string token); 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; namespace EShopOnAbp.PaymentService.PaymentServices;
[ExposeServices(typeof(IPaymentStrategy), typeof(PaypalService))] [ExposeServices(typeof(IPaymentMethod), typeof(PaypalMethod))]
public class PaypalService : IPaymentStrategy public class PaypalMethod : IPaymentMethod
{ {
private readonly PayPalHttpClient _payPalHttpClient; private readonly PayPalHttpClient _payPalHttpClient;
private readonly PaymentRequestDomainService _paymentRequestDomainService; private readonly PaymentRequestDomainService _paymentRequestDomainService;
public int PaymentTypeId { get; }
public PaypalService(PayPalHttpClient payPalHttpClient, PaymentRequestDomainService paymentRequestDomainService) public PaypalMethod(PayPalHttpClient payPalHttpClient, PaymentRequestDomainService paymentRequestDomainService)
{ {
_payPalHttpClient = payPalHttpClient; _payPalHttpClient = payPalHttpClient;
_paymentRequestDomainService = paymentRequestDomainService; _paymentRequestDomainService = paymentRequestDomainService;
PaymentTypeId = 1;
} }
public async Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest, public async Task<PaymentRequestStartResultDto> StartAsync(PaymentRequest paymentRequest,
Loading…
Cancel
Save