UNPKG

@tmlmobilidade/types

Version:
35 lines (34 loc) 1.63 kB
/* * */ 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);