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