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
|
|
|
});
|