42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export enum DiscountType {
|
|
PERCENTAGE = "PERCENTAGE",
|
|
FIXED = "FIXED",
|
|
}
|
|
|
|
export const couponModel = z.object({
|
|
id: z.number().optional(),
|
|
code: z.string().min(3).max(32),
|
|
description: z.string().optional().nullable(),
|
|
discountType: z.nativeEnum(DiscountType),
|
|
discountValue: z.coerce.number().positive(),
|
|
maxUsageCount: z.coerce.number().int().positive().optional().nullable(),
|
|
currentUsageCount: z.coerce.number().int().nonnegative().default(0),
|
|
minOrderValue: z.coerce.number().nonnegative().optional().nullable(),
|
|
maxDiscountAmount: z.coerce.number().positive().optional().nullable(),
|
|
startDate: z.coerce.string(),
|
|
endDate: z.coerce.string().optional().nullable(),
|
|
isActive: z.boolean().default(true),
|
|
createdAt: z.coerce.string().optional(),
|
|
updatedAt: z.coerce.string().optional(),
|
|
createdBy: z.coerce.string().optional().nullable(),
|
|
});
|
|
|
|
export type CouponModel = z.infer<typeof couponModel>;
|
|
|
|
export const createCouponPayload = couponModel.omit({
|
|
id: true,
|
|
currentUsageCount: true,
|
|
createdAt: true,
|
|
updatedAt: true,
|
|
});
|
|
|
|
export type CreateCouponPayload = z.infer<typeof createCouponPayload>;
|
|
|
|
export const updateCouponPayload = createCouponPayload.partial().extend({
|
|
id: z.number(),
|
|
});
|
|
|
|
export type UpdateCouponPayload = z.infer<typeof updateCouponPayload>;
|