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