UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

79 lines (64 loc) 2.02 kB
import { z } from 'zod'; import { SESSION_STATUS } from './Session.const'; import { gameTypeSchema } from '../game/Game.schema'; import { playerSchema } from '../player/Player.schema'; import { gameTicketSchema, gameTurnSchema } from '../ticketing/Ticketing.schema'; export const sessionStatusSchema = z.enum(SESSION_STATUS); export const sessionTicketSchema = z.object({ quantity: z.number().int().positive(), type: gameTypeSchema, }); export const gameSessionSchema = z.object({ id: z.uuidv4(), code: z.string().length(6), // 6-char alphanumeric contactPhone: z.string().optional(), userId: z.string().optional().nullable(), tickets: z.array(gameTicketSchema).optional(), playerIds: z.array(z.uuidv4()), linkedPurchaseId: z.string().optional(), status: sessionStatusSchema.default(SESSION_STATUS.REGISTRATION), createdAt: z.date(), updatedAt: z.date(), }); export const gameSessionWithPlayersSchema = gameSessionSchema.extend({ players: z.array(playerSchema), turns: z.array(gameTurnSchema).optional(), }); export const createSessionInputSchema = z.object({ contactPhone: z.string().optional(), userId: z.string().optional().nullable(), tickets: z.array(sessionTicketSchema).min(1), }); export const joinSessionSchema = z.object({ nickname: z.string().min(2), birthDate: z.coerce.date(), }); export const addExistingPlayersSchema = z.object({ playerIds: z.array(z.uuidv4()).min(1), }); export const updateSessionStatusSchema = z.object({ status: sessionStatusSchema, }); export const createGameTurnInputSchema = z.object({ assignments: z .array( z.object({ ticketId: z.string(), playerId: z.uuidv4(), }), ) .min(1), }); export const assignSessionTicketsInputSchema = z.object({ assignments: z .array( z.object({ ticketId: z.string(), playerId: z.uuidv4(), }), ) .min(1), }); export const bulkCreateGameTurnSchema = z.object({ turns: z.array(createGameTurnInputSchema).min(1), });