/** * @ai-summary Request validation schemas for admin API * @ai-context Uses Zod for runtime validation and type safety */ import { z } from 'zod'; export const createAdminSchema = z.object({ email: z.string().email('Invalid email format'), role: z.enum(['admin', 'super_admin']).default('admin'), }); export const adminIdSchema = z.object({ id: z.string().uuid('Invalid admin ID format'), }); export const auditLogsQuerySchema = z.object({ limit: z.coerce.number().min(1).max(1000).default(100), offset: z.coerce.number().min(0).default(0), }); export const bulkCreateAdminSchema = z.object({ admins: z.array( z.object({ email: z.string().email('Invalid email format'), role: z.enum(['admin', 'super_admin']).optional().default('admin'), }) ).min(1, 'At least one admin must be provided').max(100, 'Maximum 100 admins per batch'), }); export const bulkRevokeAdminSchema = z.object({ ids: z.array(z.string().uuid('Invalid admin ID format')) .min(1, 'At least one admin ID must be provided') .max(100, 'Maximum 100 admins per batch'), }); export const bulkReinstateAdminSchema = z.object({ ids: z.array(z.string().uuid('Invalid admin ID format')) .min(1, 'At least one admin ID must be provided') .max(100, 'Maximum 100 admins per batch'), }); export const catalogEntitySchema = z.enum(['makes', 'models', 'years', 'trims', 'engines']); export const bulkDeleteCatalogSchema = z.object({ ids: z.array(z.number().int().positive('ID must be a positive integer')) .min(1, 'At least one ID must be provided') .max(100, 'Maximum 100 items per batch'), }); export type CreateAdminInput = z.infer; export type AdminIdInput = z.infer; export type AuditLogsQueryInput = z.infer; export type BulkCreateAdminInput = z.infer; export type BulkRevokeAdminInput = z.infer; export type BulkReinstateAdminInput = z.infer; export type CatalogEntity = z.infer; export type BulkDeleteCatalogInput = z.infer;