import { ALLOWED_LINK_KEYS } from "@typez/urls/enums";
import mongoose from "mongoose";
import { z } from "zod";
/**
* Zod validation schemas for URL/link endpoints
*/
const ObjectIdParamSchema = z.string().refine((val) => mongoose.Types.ObjectId.isValid(val), {
message: "Invalid MongoDB ObjectId format",
});
const SubLinkSchema = z
.string()
.min(1, "SubLink is required")
.max(100, "SubLink cannot exceed 100 characters")
.regex(/^[a-z0-9._-]+$/, "SubLink can only contain lowercase letters, numbers, dots, underscores, and hyphens")
.transform((s) => s.trim().toLowerCase());
export const GetInvestigationLinksParamsSchema = z.object({
id: ObjectIdParamSchema,
});
export const CreateLinkBodySchema = z.object({
key: z
.string()
.min(1)
.refine((k) => ALLOWED_LINK_KEYS.includes(k), {
message: `key must be one of: ${ALLOWED_LINK_KEYS.join(", ")}`,
}),
subLink: SubLinkSchema.optional(),
description: z.string().trim().max(200, "Description cannot exceed 200 characters").optional(),
});
export const ResolveLinkParamsSchema = z.object({
key: z.string().min(1),
subLink: z.string().min(1),
});
Source