@tmlmobilidade/types
Version:
35 lines (34 loc) • 1.63 kB
JavaScript
/* * */
import { PermissionSchema } from '../permissions/index.js';
import { DocumentSchema, UnixTimestampSchema } from '@tmlmobilidade/go-types-shared';
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);