UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

51 lines (41 loc) 1.42 kB
import { z } from 'zod'; import { PLAYER_TYPE } from './Player.const'; export const playerTypeSchema = z.enum(PLAYER_TYPE); export const playerWaiverStatusSchema = z.object({ isSigned: z.boolean().default(false), waiverId: z.uuidv4().nullable().optional(), templateVersion: z.string().optional(), expiresAt: z.date().nullable().optional(), }); export const playerStatsSchema = z.object({ totalRaces: z.number().int().default(0), bestTimeMs: z.number().int().nullable().optional(), xp: z.number().int().default(0), }); export const playerSchema = z.object({ id: z.uuidv4(), nickname: z.string().min(2).max(20), avatarUrl: z.url().optional(), birthDate: z.date(), type: playerTypeSchema.default(PLAYER_TYPE.ADULT), ownerUserId: z.uuidv4().nullable().optional(), isGuest: z.boolean().default(true), waiver: playerWaiverStatusSchema, // TODO: Add the stats here, to aovid extra queries stats: playerStatsSchema.optional().nullable(), createdAt: z.date(), updatedAt: z.date(), }); export const createPlayerSchema = playerSchema .pick({ nickname: true, ownerUserId: true, isGuest: true, }) .extend({ birthDate: z.coerce.date(), }); export const signWaiverSchema = z.object({ signature: z.string().optional(), // Base64 or simply a boolean acceptance. Let's make it flexible. accepted: z.literal(true), // They must explicitly pass accepted: true });