@tmlmobilidade/types
Version:
36 lines (35 loc) • 1.67 kB
JavaScript
/* * */
import { DocumentSchema } from '../_common/document.js';
import { UnixTimeStampSchema } from '../_common/unix-timestamp.js';
import { PermissionSchema } from '../permissions/index.js';
import { z } from 'zod';
/* * */
export const UserPreferenceValueSchema = z.union([
z.string(),
z.number(),
z.boolean(),
z.array(z.string()),
z.array(z.number()),
]);
/* * */
export const UserSchema_UNSAFE = DocumentSchema.extend({
email: z.string().email(),
email_verified: UnixTimeStampSchema.nullable().default(null),
first_name: z.string().min(2),
last_name: z.string().min(2),
organization_id: z.string(),
password_hash: z.string().nullable().default(null),
permissions: z.array(PermissionSchema).default([]),
phone: z.string().nullable().default(null),
preferences: z.record(z.record(UserPreferenceValueSchema)).nullable().default(null),
role_ids: z.array(z.string()).default([]),
seen_last_at: UnixTimeStampSchema.nullable().default(null),
session_ids: z.array(z.string()).default([]),
verification_token_ids: z.array(z.string()).default([]),
});
export const CreateUserSchema = UserSchema_UNSAFE.omit({ _id: true, created_at: true, updated_at: true });
export const UpdateUserSchema = CreateUserSchema.omit({ created_by: true, session_ids: true, verification_token_ids: true }).partial();
export const UserSchema = UserSchema_UNSAFE.omit({ password_hash: true, session_ids: true, verification_token_ids: true });
/* * */
export const UserDisplayFields = { _id: true, email: true, first_name: true, last_name: true, phone: true };
export const UserDisplaySchema = UserSchema.pick(UserDisplayFields);