Files
admin.fellies.app/src/schemas/artists/artistSchema.ts
2025-06-25 17:04:45 +02:00

26 lines
825 B
TypeScript

import * as z from "zod/v4";
export const socialSchema = z.object({
id: z.string().optional(),
platform: z.string().min(1, "Platform is required"),
handle: z.string().min(1, "Handle is required"),
isPrimary: z.boolean(),
link: z.string().optional(),
});
export const artistSchema = z.object({
displayName: z.string().min(3, "Name is required. Min 3 characters."),
slug: z.string().min(3, "Slug is required. Min 3 characters.").regex(/^[a-z]+$/, "Only lowercase letters are allowed (no numbers, spaces, or uppercase)"),
nickname: z.string().optional(),
socials: z.array(socialSchema).optional(),
}).refine(
(data) => {
const socials = data.socials || [];
return socials.filter((s) => s.isPrimary).length <= 1;
},
{
message: "Only one social can be primary",
path: ["socials"],
}
);