feat: polish wallet recharge cards

This commit is contained in:
JetSprow
2026-05-01 03:41:30 +10:00
parent 035ac9266a
commit 0c8b402f3e
15 changed files with 774 additions and 103 deletions

View File

@@ -2,6 +2,7 @@
import { revalidatePath } from "next/cache";
import { z } from "zod";
import { prisma } from "@/lib/prisma";
import { requireAuth } from "@/lib/require-auth";
import { createWalletRechargeOrder, redeemRechargeCard } from "@/services/wallet";
@@ -23,8 +24,40 @@ export async function createWalletRecharge(formData: FormData) {
export async function redeemWalletCard(formData: FormData) {
const session = await requireAuth();
const data = redeemSchema.parse(Object.fromEntries(formData));
await redeemRechargeCard(session.user.id, data.code);
const result = await redeemRechargeCard(session.user.id, data.code);
revalidatePath("/wallet");
revalidatePath("/subscriptions");
revalidatePath("/dashboard");
return result;
}
export async function cancelWalletRecharge(rechargeId: string) {
const session = await requireAuth();
const recharge = await prisma.walletRechargeOrder.findFirst({
where: { id: rechargeId, userId: session.user.id },
select: { id: true, status: true },
});
if (!recharge) {
throw new Error("充值订单不存在");
}
if (recharge.status !== "PENDING") {
throw new Error("这笔充值订单已经不在待支付状态");
}
await prisma.walletRechargeOrder.update({
where: { id: rechargeId },
data: {
status: "CANCELLED",
paymentMethod: null,
paymentRef: null,
paymentUrl: null,
tradeNo: null,
expireAt: null,
note: null,
},
});
revalidatePath("/wallet");
revalidatePath(`/wallet/recharge/${rechargeId}`);
}