UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

104 lines (86 loc) 3.07 kB
import { z } from 'zod'; import { GAME_TICKET_STATUS, GAME_TURN_CHECK, GAME_TURN_STATUS, GAME_TURN_TASK_STATUS, GAME_TURN_TASK_TYPE, PURCHASE_STATUS, TICKET_TYPE, TICKET_USER_TYPE, } from './Ticketing.const'; import { gameTypeSchema } from '../game'; export const gameTicketStatusSchema = z.enum(GAME_TICKET_STATUS); export const ticketUserTypeSchema = z.enum(TICKET_USER_TYPE); export const ticketTypeSchema = z.enum(TICKET_TYPE); export const ticketSummarySchema = z.record(ticketTypeSchema, z.number()); export const gameTicketSchema = z.object({ id: z.uuidv4(), purchaseId: z.string(), sessionId: z.string().optional().nullable(), gameTurnId: z.string().optional().nullable(), playerId: z.uuidv4().optional().nullable(), status: gameTicketStatusSchema, type: ticketTypeSchema.default(TICKET_TYPE.RACE), createdAt: z.date(), updatedAt: z.date(), completedAt: z.date().optional(), }); export const purchaseStatusSchema = z.enum(PURCHASE_STATUS); export const purchaseItemSchema = z.object({ ticketType: gameTypeSchema, quantity: z.number().int().positive(), priceCents: z.number().int().nonnegative(), }); export const purchaseSchema = z.object({ id: z.uuidv4(), purchaseNumber: z.number(), // Buyer can be null for Guest/On-Site purchases buyerUserId: z.string().optional().nullable(), guestName: z.string().optional().nullable(), guestContact: z.string().optional().nullable(), items: z.array(purchaseItemSchema), totalAmountCents: z.number().min(0), status: purchaseStatusSchema.default(PURCHASE_STATUS.PENDING), // Deprecated fields (kept for backward compatibility if needed, or remove if safe) totalTickets: z.number().optional(), ticketType: ticketTypeSchema.optional(), paymentData: z.any().optional(), createdAt: z.date(), updatedAt: z.date(), }); export const createPurchaseInputSchema = z.object({ buyerUserId: z.string().optional(), guestName: z.string().optional(), guestContact: z.string().optional(), items: z.array(purchaseItemSchema).min(1), }); export const gameTurnStatusSchema = z.enum(GAME_TURN_STATUS); export const gameTurnCheckSchema = z.enum(GAME_TURN_CHECK); export const gameTurnTaskTypeSchema = z.enum(GAME_TURN_TASK_TYPE); export const gameTurnTaskStatusSchema = z.enum(GAME_TURN_TASK_STATUS); export const gameTurnTaskSchema = z.object({ id: z.string(), type: gameTurnTaskTypeSchema, status: gameTurnTaskStatusSchema, label: z.string(), metadata: z.record(z.string(), z.any()).optional(), completedAt: z.date().optional(), }); export const gameTurnSchema = z.object({ id: z.string(), purchaseId: z.string(), sessionId: z.string().optional(), leaderPlayerId: z.string(), gameTickets: z.array(z.string()), playerIds: z.array(z.string()), status: gameTurnStatusSchema, tasks: z.array(gameTurnTaskSchema), createdAt: z.date(), updatedAt: z.date(), startedAt: z.date().optional(), completedAt: z.date().optional(), }); export const gameTurnQueueItemSchema = gameTurnSchema.extend({ position: z.number(), });