import { z } from "zod"; export const PaperStatus = z.enum(["published", "corrected", "retracted"]); export type PaperStatus = z.infer; export const PublicPaperSummary = z.object({ publicId: z.string(), slug: z.string(), title: z.string(), abstract: z.string(), keywords: z.array(z.string()), discipline: z.string(), researchMode: z.string(), status: PaperStatus, versionNo: z.number().int(), firstPublishedAt: z.string(), updatedAt: z.string(), seriesSlug: z.string().nullable(), topics: z.array(z.object({ slug: z.string(), name: z.string() })), hasCode: z.boolean(), hasData: z.boolean(), hasLatex: z.boolean(), synthetic: z.boolean(), }); export type PublicPaperSummary = z.infer; export const PublicSearchQuery = z.object({ q: z.string().max(200).optional(), discipline: z.string().optional(), mode: z.string().optional(), series: z.string().optional(), status: PaperStatus.optional(), code: z.enum(["1"]).optional(), data: z.enum(["1"]).optional(), from: z.string().optional(), to: z.string().optional(), sort: z.enum(["relevance", "date", "title"]).default("date"), page: z.coerce.number().int().min(1).default(1), pageSize: z.coerce.number().int().min(1).max(50).default(12), }); export type PublicSearchQuery = z.infer;