26 lines
825 B
TypeScript
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"],
|
|
}
|
|
);
|