@battle-racing/br-common-lib
Version:
Common library for all Battle Racing Repositorios
51 lines (41 loc) • 1.42 kB
text/typescript
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
});