/** * Subscriptions Domain - Schemas * * Zod validation schemas for subscription domain types. */ import { z } from "zod"; // Subscription Status Schema export const subscriptionStatusSchema = z.enum([ "Active", "Inactive", "Pending", "Cancelled", "Suspended", "Terminated", "Completed", ]); // Subscription Cycle Schema export const subscriptionCycleSchema = z.enum([ "Monthly", "Quarterly", "Semi-Annually", "Annually", "Biennially", "Triennially", "One-time", "Free", ]); // Subscription Schema export const subscriptionSchema = z.object({ id: z.number().int().positive("Subscription id must be positive"), serviceId: z.number().int().positive("Service id must be positive"), productName: z.string().min(1, "Product name is required"), domain: z.string().optional(), cycle: subscriptionCycleSchema, status: subscriptionStatusSchema, nextDue: z.string().optional(), amount: z.number(), currency: z.string().min(1, "Currency is required"), currencySymbol: z.string().optional(), registrationDate: z.string().min(1, "Registration date is required"), notes: z.string().optional(), customFields: z.record(z.string(), z.string()).optional(), orderNumber: z.string().optional(), groupName: z.string().optional(), paymentMethod: z.string().optional(), serverName: z.string().optional(), }); // Subscription List Schema export const subscriptionListSchema = z.object({ subscriptions: z.array(subscriptionSchema), totalCount: z.number().int().nonnegative(), });