refactor(dto): centralize backend schema defaults

This commit is contained in:
2026-07-06 11:14:56 +08:00
parent 2d736f00ba
commit 473f6a3726
40 changed files with 513 additions and 231 deletions
@@ -3,6 +3,8 @@
*/
import { z } from "zod";
import { stringOrNull } from "../nullable-defaults";
const paymentUrlKeys = [
"cashierUrl",
"cashier_url",
@@ -20,17 +22,17 @@ const paymentUrlKeys = [
export const CreatePaymentOrderResponseSchema = z.object({
orderId: z.string(),
payParams: z.record(z.string(), z.unknown()),
cashierUrl: z.string().optional(),
cashier_url: z.string().optional(),
checkoutUrl: z.string().optional(),
checkout_url: z.string().optional(),
paymentUrl: z.string().optional(),
payment_url: z.string().optional(),
approvalUrl: z.string().optional(),
approval_url: z.string().optional(),
redirectUrl: z.string().optional(),
redirect_url: z.string().optional(),
url: z.string().optional(),
cashierUrl: stringOrNull,
cashier_url: stringOrNull,
checkoutUrl: stringOrNull,
checkout_url: stringOrNull,
paymentUrl: stringOrNull,
payment_url: stringOrNull,
approvalUrl: stringOrNull,
approval_url: stringOrNull,
redirectUrl: stringOrNull,
redirect_url: stringOrNull,
url: stringOrNull,
}).transform((data) => {
const payParams = { ...data.payParams };
+13 -7
View File
@@ -3,20 +3,26 @@
*/
import { z } from "zod";
import {
booleanOrFalse,
numberOrNull,
stringOrNull,
} from "../nullable-defaults";
export const PaymentPlanSchema = z.object({
planId: z.string(),
planName: z.string(),
orderType: z.string(),
vipDays: z.number().nullable(),
dolAmount: z.number().nullable(),
vipDays: numberOrNull,
dolAmount: numberOrNull,
creditBalance: z.number(),
amountCents: z.number(),
originalAmountCents: z.number().nullable().default(null),
dailyPriceCents: z.number().nullable().default(null),
originalAmountCents: numberOrNull,
dailyPriceCents: numberOrNull,
currency: z.string(),
isFirstRechargeOffer: z.boolean().default(false),
firstRechargeDiscountPercent: z.number().nullable().default(null),
promotionType: z.string().nullable().default(null),
isFirstRechargeOffer: booleanOrFalse,
firstRechargeDiscountPercent: numberOrNull,
promotionType: stringOrNull,
});
export type PaymentPlanInput = z.input<typeof PaymentPlanSchema>;
@@ -3,7 +3,13 @@
*/
import { z } from "zod";
import { booleanOrFalse, numberOrZero, stringOrEmpty } from "../nullable-defaults";
import {
arrayOrEmpty,
booleanOrFalse,
numberOrZero,
schemaOrNull,
stringOrEmpty,
} from "../nullable-defaults";
import { PaymentPlanSchema } from "./payment_plan";
export const FirstRechargeOfferSchema = z.object({
@@ -13,9 +19,9 @@ export const FirstRechargeOfferSchema = z.object({
});
export const PaymentPlansResponseSchema = z.object({
isFirstRecharge: z.boolean().default(false),
firstRechargeOffer: FirstRechargeOfferSchema.nullable().default(null),
plans: z.array(PaymentPlanSchema),
isFirstRecharge: booleanOrFalse,
firstRechargeOffer: schemaOrNull(FirstRechargeOfferSchema),
plans: arrayOrEmpty(PaymentPlanSchema),
});
export type PaymentPlansResponseInput = z.input<
@@ -3,9 +3,11 @@
*/
import { z } from "zod";
import { booleanOrFalse, stringOrNull } from "../nullable-defaults";
export const PaymentVipStatusResponseSchema = z.object({
isVip: z.boolean(),
vipExpiresAt: z.string().nullable(),
isVip: booleanOrFalse,
vipExpiresAt: stringOrNull,
});
export type PaymentVipStatusResponseInput = z.input<