UNPKG

@battle-racing/br-common-lib

Version:

Common library for all Battle Racing Repositorios

86 lines (70 loc) 2.22 kB
import { z } from 'zod'; import { paginatedResponseSchema } from '../pagination'; import { JOIN_REQUEST_STATUS, RACING_TEAM_ROLE } from './RacingTeam.const'; import { playerSchema } from '../player/Player.schema'; // --- Team Schemas --- export const racingTeamSchema = z.object({ id: z.string(), name: z.string().min(3).max(50), imageUrl: z.url().optional(), adminUserId: z.string(), createdAt: z.date(), updatedAt: z.date(), }); export const createRacingTeamSchema = racingTeamSchema.omit({ id: true, createdAt: true, updatedAt: true, adminUserId: true, }); export const updateRacingTeamSchema = racingTeamSchema.partial(); export const filterRacingTeamSchema = z.object({ name: z.string().optional(), adminUserId: z.string().optional(), page: z.coerce.number().min(1).default(1), limit: z.coerce.number().min(1).max(100).default(10), cursor: z.string().optional(), }); export const racingTeamSummarySchema = racingTeamSchema.pick({ id: true, name: true, imageUrl: true, }); export const paginatedRacingTeamSchema = paginatedResponseSchema(racingTeamSchema); export const paginatedRacingTeamSummarySchema = paginatedResponseSchema(racingTeamSummarySchema); // --- Membership Schemas --- export const joinRequestSchema = z.object({ id: z.string(), racingTeamId: z.string(), playerId: z.string(), status: z.enum(JOIN_REQUEST_STATUS), createdAt: z.date(), updatedAt: z.date(), }); export const teamMemberSchema = z.object({ id: z.string(), racingTeamId: z.string(), playerId: z.string(), role: z.enum(RACING_TEAM_ROLE), joinedAt: z.date(), }); export const teamMemberWithPlayerSchema = playerSchema.extend({ role: z.enum(RACING_TEAM_ROLE), joinedAt: z.date(), }); export const racingTeamWithMembersSchema = racingTeamSchema.extend({ members: z.array(teamMemberWithPlayerSchema), }); export const createJoinRequestSchema = z.object({ racingTeamId: z.string(), playerId: z.string(), }); export const answerJoinRequestSchema = z.object({ racingTeamId: z.string(), targetPlayerId: z.string(), accepted: z.boolean(), }); export const addTeamMemberSchema = z.object({ nickname: z.string().min(2).max(20), birthDate: z.coerce.date(), });