30 lines
717 B
TypeScript
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'],
|
|
},
|
|
);
|