mosh-helpdesk/core/schemas/tickets.ts
Moshfegh Hamedani a2531b1ce0 Add pagination
2026-02-23 10:16:53 -08:00

34 lines
1.1 KiB
TypeScript

import { z } from "zod/v4";
import { ticketStatuses } from "../constants/ticket-status.ts";
import { ticketCategories } from "../constants/ticket-category.ts";
export const inboundEmailSchema = z.object({
from: z.email("Invalid email address"),
fromName: z.string().trim().min(1, "Sender name is required"),
subject: z.string().trim().min(1, "Subject is required"),
body: z.string().min(1, "Body is required"),
bodyHtml: z.string().optional(),
});
export type InboundEmailInput = z.infer<typeof inboundEmailSchema>;
const sortableColumns = [
"subject",
"senderName",
"status",
"category",
"createdAt",
] as const;
export type TicketSortField = (typeof sortableColumns)[number];
export const ticketListQuerySchema = z.object({
sortBy: z.enum(sortableColumns).default("createdAt"),
sortOrder: z.enum(["asc", "desc"]).default("desc"),
status: z.enum(ticketStatuses).optional(),
category: z.enum(ticketCategories).optional(),
search: z.string().optional(),
page: z.coerce.number().int().min(1).default(1),
pageSize: z.coerce.number().int().min(1).max(100).default(10),
});