Files
fullstack-fuware/src/service/user.schema.ts
2026-01-20 22:21:06 +07:00

46 lines
1.4 KiB
TypeScript

import { m } from '@/paraglide/messages';
import z from 'zod';
export const userListSchema = z.object({
page: z.coerce.number().min(1).default(1),
limit: z.coerce.number().min(10).max(100).default(10),
keyword: z.string().optional(),
});
export const userSetPasswordSchema = z.object({
id: z.string().nonempty(m.users_page_message_user_not_found()),
password: z
.string()
.min(5, m.users_page_message_user_min())
.regex(/[A-Z]/, m.users_page_message_contain_uppercase())
.regex(/[a-z]/, m.users_page_message_contain_lowercase())
.regex(/[0-9]/, m.users_page_message_contain_number())
.regex(/[^a-zA-Z0-9]/, m.users_page_message_contain_special()),
});
export const userUpdateInfoSchema = z.object({
id: z.string().nonempty(m.users_page_message_user_not_found()),
name: z.string().nonempty(
m.common_is_required({
field: m.profile_form_name(),
}),
),
});
export const RoleEnum = z.enum(['admin', 'user']);
export const userUpdateRoleSchema = z.object({
id: z.string().nonempty(m.users_page_message_user_not_found()),
role: RoleEnum,
});
export const userBanSchema = z.object({
id: z.string().nonempty(m.users_page_message_user_not_found()),
banReason: z.string().nonempty(
m.common_is_required({
field: m.users_page_ui_form_ban_reason(),
}),
),
banExp: z.number().int().min(1, m.users_page_message_select_min_one_day()),
});