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; export const createCouponPayload = couponModel.omit({ id: true, currentUsageCount: true, createdAt: true, updatedAt: true, }); export type CreateCouponPayload = z.infer; export const updateCouponPayload = createCouponPayload.partial().extend({ id: z.number(), }); export type UpdateCouponPayload = z.infer;