mosh-helpdesk/core/schemas/tickets.ts

34 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-02-19 18:30:43 +01:00
import { z } from "zod/v4";
2026-02-23 18:35:58 +01:00
import { ticketStatuses } from "../constants/ticket-status.ts";
import { ticketCategories } from "../constants/ticket-category.ts";
2026-02-19 18:30:43 +01:00
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>;
2026-02-23 18:03:04 +01:00
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"),
2026-02-23 18:35:58 +01:00
status: z.enum(ticketStatuses).optional(),
category: z.enum(ticketCategories).optional(),
search: z.string().optional(),
2026-02-23 19:16:53 +01:00
page: z.coerce.number().int().min(1).default(1),
pageSize: z.coerce.number().int().min(1).max(100).default(10),
2026-02-23 18:03:04 +01:00
});