🐛 Fix wallet service didn't impl the Subscription Service Grpc

This commit is contained in:
2026-02-04 02:33:14 +08:00
parent 07c9c907f4
commit 766f229c10
2 changed files with 98 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
using DysonNetwork.Shared.Models;
using DysonNetwork.Shared.Proto;
using DysonNetwork.Shared.Registry;
using Grpc.Core;
namespace DysonNetwork.Wallet.Payment;
public class SubscriptionServiceGrpc(
SubscriptionService subscriptionService,
IGrpcClientFactory<AccountService.AccountServiceClient> accountsFactory
) : Shared.Proto.SubscriptionService.SubscriptionServiceBase
{
private readonly AccountService.AccountServiceClient _accounts = accountsFactory.CreateClient();
public override async Task<Subscription> GetSubscription(
GetSubscriptionRequest request,
ServerCallContext context
)
{
var subscription = await subscriptionService.GetSubscriptionAsync(
Guid.Parse(request.AccountId),
request.Identifier
);
return subscription?.ToProtoValue()
?? throw new RpcException(new Status(StatusCode.NotFound, "Subscription not found"));
}
public override async Task<Subscription> GetPerkSubscription(
GetPerkSubscriptionRequest request,
ServerCallContext context
)
{
var subscription = await subscriptionService.GetPerkSubscriptionAsync(
Guid.Parse(request.AccountId)
);
return subscription?.ToProtoValue()
?? throw new RpcException(new Status(StatusCode.NotFound, "Perk subscription not found"));
}
public override async Task<GetPerkSubscriptionsResponse> GetPerkSubscriptions(
GetPerkSubscriptionsRequest request,
ServerCallContext context
)
{
var accountIds = request.AccountIds.Select(Guid.Parse).ToList();
var subscriptions = await subscriptionService.GetPerkSubscriptionsAsync(accountIds);
var response = new GetPerkSubscriptionsResponse();
foreach (var subscription in subscriptions.Values)
{
if (subscription != null)
{
response.Subscriptions.Add(subscription.ToProtoValue());
}
}
return response;
}
public override async Task<Subscription> CreateSubscription(
CreateSubscriptionRequest request,
ServerCallContext context
)
{
var account = await _accounts.GetAccountAsync(new GetAccountRequest { Id = request.AccountId });
if (account == null)
{
throw new RpcException(new Status(StatusCode.NotFound, "Account not found"));
}
var subscription = await subscriptionService.CreateSubscriptionAsync(
account,
request.Identifier,
request.PaymentMethod,
new SnPaymentDetails(),
null,
request.HasCouponCode ? request.CouponCode : null,
request.IsFreeTrial,
true
);
return subscription.ToProtoValue();
}
public override async Task<Subscription> CancelSubscription(
CancelSubscriptionRequest request,
ServerCallContext context
)
{
var subscription = await subscriptionService.CancelSubscriptionAsync(
Guid.Parse(request.AccountId),
request.Identifier
);
return subscription.ToProtoValue();
}
}