feat(payment): connect payment service flow

This commit is contained in:
2026-06-18 15:40:59 +08:00
parent 35c30ac31e
commit a347b39001
34 changed files with 759 additions and 889 deletions
@@ -0,0 +1,54 @@
/**
* Payment 状态机:Actors(异步服务)
*/
import { fromPromise } from "xstate";
import {
CreatePaymentOrderResponse,
PayChannel,
PaymentOrderStatusResponse,
PaymentPlansResponse,
PaymentVipStatusResponse,
} from "@/data/dto/payment";
import { paymentRepository } from "@/data/repositories/payment_repository";
import type { IPaymentRepository } from "@/data/repositories/interfaces";
import { Result } from "@/utils";
const paymentRepo: IPaymentRepository = paymentRepository;
export const loadPaymentPlansActor = fromPromise<PaymentPlansResponse>(
async () => {
const result = await paymentRepo.getPlans();
if (Result.isErr(result)) throw result.error;
return result.data;
},
);
export const createPaymentOrderActor = fromPromise<
CreatePaymentOrderResponse,
{ planId: string; payChannel: PayChannel; autoRenew: boolean }
>(async ({ input }) => {
const result = await paymentRepo.createOrder(
input.planId,
input.payChannel,
input.autoRenew,
);
if (Result.isErr(result)) throw result.error;
return result.data;
});
export const pollPaymentOrderStatusActor = fromPromise<
PaymentOrderStatusResponse,
{ orderId: string }
>(async ({ input }) => {
const result = await paymentRepo.getOrderStatus(input.orderId);
if (Result.isErr(result)) throw result.error;
return result.data;
});
export const loadPaymentVipStatusActor =
fromPromise<PaymentVipStatusResponse>(async () => {
const result = await paymentRepo.getVipStatus();
if (Result.isErr(result)) throw result.error;
return result.data;
});