Source

schemas/url.validation.js

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