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