forked from xiongyuxing/tiku-backend.net
feat: modularize external providers
This commit is contained in:
@@ -1,49 +1,41 @@
|
||||
using System.Text.Json;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Tiku.Application.Commerce;
|
||||
using Tiku.Application.Tenancy;
|
||||
using Tiku.Domain.Tenancy;
|
||||
using Tiku.Domain.Commerce;
|
||||
using Tiku.Infrastructure.Persistence;
|
||||
|
||||
namespace Tiku.Infrastructure.Commerce;
|
||||
|
||||
internal sealed class PaymentProviderConfigService(
|
||||
TikuDbContext dbContext,
|
||||
ITenantSecretService tenantSecretService) : IPaymentProviderConfigService
|
||||
ITenantExternalProviderConfigService providerConfigService) : IPaymentProviderConfigService
|
||||
{
|
||||
public async Task<PaymentProviderAccount> GetActiveAccountAsync(
|
||||
Guid tenantId,
|
||||
string provider,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var normalizedProvider = NormalizeProvider(provider);
|
||||
var account = await dbContext.TenantPaymentAccounts
|
||||
.AsNoTracking()
|
||||
.Where(item =>
|
||||
item.TenantId == tenantId &&
|
||||
item.Provider == normalizedProvider &&
|
||||
item.Status == TenantPaymentAccountStatus.Active)
|
||||
.SingleOrDefaultAsync(cancellationToken);
|
||||
|
||||
if (account is null)
|
||||
TenantExternalProviderAccount account;
|
||||
try
|
||||
{
|
||||
throw new PaymentProviderException(
|
||||
"Payment provider account is not configured.",
|
||||
"payment_provider_not_configured");
|
||||
}
|
||||
|
||||
var secretPayload = normalizedProvider == PaymentProviders.Manual
|
||||
? JsonDocument.Parse("{}").RootElement.Clone()
|
||||
: await tenantSecretService.GetActiveSecretPayloadAsync(
|
||||
account = await providerConfigService.GetActiveProviderAsync(
|
||||
tenantId,
|
||||
GetString(account.ConfigPublic, "secretRef", "secret_ref") ?? string.Empty,
|
||||
TenantExternalProviderCapability.Payment,
|
||||
NormalizeProvider(provider),
|
||||
cancellationToken);
|
||||
}
|
||||
catch (TenantExternalProviderException exception)
|
||||
{
|
||||
throw new PaymentProviderException(exception.Message, "payment_provider_not_configured");
|
||||
}
|
||||
|
||||
return new PaymentProviderAccount(
|
||||
account.TenantId,
|
||||
normalizedProvider,
|
||||
account.Mode.ToString(),
|
||||
account.Provider,
|
||||
GetString(account.ConfigPublic, "mode") ?? "TenantCollect",
|
||||
account.ConfigPublic,
|
||||
secretPayload);
|
||||
account.SecretPayload);
|
||||
}
|
||||
|
||||
private static string NormalizeProvider(string provider)
|
||||
|
||||
Reference in New Issue
Block a user