Files
medreport_mrb2b/packages/features/team-accounts/src/schema/invite-members.schema.ts

30 lines
717 B
TypeScript

import { z } from 'zod';
const InviteSchema = z.object({
email: z.string().email(),
role: z.string().min(1).max(100),
personal_code: z.string().regex(/^[1-6]\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}\d$/, {
message: 'Invalid Estonian personal code format',
}),
});
export const InviteMembersSchema = z
.object({
invitations: InviteSchema.array().min(1).max(5),
})
.refine(
(data) => {
const emails = data.invitations.map((member) =>
member.email.toLowerCase(),
);
const uniqueEmails = new Set(emails);
return emails.length === uniqueEmails.size;
},
{
message: 'Duplicate emails are not allowed',
path: ['invitations'],
},
);