AAlex Hollidaymigrate user type
09ab7ccc创建于 10月2日历史提交
import { z } from "zod";
import { passwordPattern, nameValidation, lowercaseEmailValidation } from "./shared.js";
import { UserRoles } from "@/domain/users/user.type.js";
import { userExample, userResponseSchema } from "@/domain/users/user.schema.js";

//****************************************
// Auth Validations
//****************************************

export const loginValidation = z.object({
	email: z.email("Must be a valid email address").transform((val) => val.toLowerCase()),
	password: z.string().min(1, "Password is required"),
});

export const registrationBodyValidation = z.object({
	firstName: nameValidation,
	lastName: nameValidation,
	email: lowercaseEmailValidation,
	password: z
		.string()
		.min(8, "Password must be at least 8 characters")
		.regex(passwordPattern, "Password must contain at least one lowercase letter, one uppercase letter, one number, and one special character"),
	profileImage: z.any().optional(),
	inviteToken: z.string().optional().default(""),
});

export const registerInviteTokenValidation = z.string().optional().default("");

export const recoveryValidation = z.object({
	email: z.email("Must be a valid email address"),
});

export const recoveryTokenBodyValidation = z.object({
	recoveryToken: z.string().min(1, "Recovery token is required"),
});

export const newPasswordValidation = z.object({
	recoveryToken: z.string().min(1, "Recovery token is required"),
	password: z
		.string()
		.min(8, "Password must be at least 8 characters")
		.regex(passwordPattern, "Password must contain at least one lowercase letter, one uppercase letter, one number, and one special character"),
	confirm: z.string().optional(),
});

export const inviteBodyValidation = z.object({
	email: z.email("Must be a valid email address"),
	role: z.array(z.enum(UserRoles)).min(1, "At least one role is required"),
	teamId: z.string().min(1, "Team ID is required"),
});

export const inviteVerificationBodyValidation = z.object({
	token: z.string().min(1, "Token is required"),
});

export const authPayloadResponseSchema = z
	.object({
		user: userResponseSchema,
		token: z.string().optional(),
	})
	.meta({ id: "AuthPayload", example: { user: userExample, token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } });

export const superadminExistsResponseSchema = z.object({ superAdminExists: z.boolean() });