Files
echecsfrance/src/schemas.ts
T

83 lines
2.6 KiB
TypeScript

import { zu } from "@infra-blocks/zod-utils";
import { z } from "zod";
import { TimeControl } from "@/types";
export const contactUsSchema = z.object({
email: z.string().email(),
subject: z.string().min(1, { message: "FormValidation.required" }),
message: z.string().min(1, { message: "FormValidation.required" }),
});
export const addClubSchema = z.object({
name: z.string().min(1, { message: "FormValidation.required" }),
email: z.string().email(),
message: z.string().optional(),
club: z.object({
name: z.string().min(1, { message: "FormValidation.required" }),
email: z.string().email().optional(),
address: z.string().min(1, { message: "FormValidation.required" }),
website: z.string().url({ message: "FormValidation.url" }).optional(),
coordinates: z.array(z.number()).length(2),
}),
});
export const addTournamentSchema = z.object({
name: z.string().min(1, { message: "FormValidation.required" }),
email: z.string().email(),
message: z.string().optional(),
tournament: z.object({
address: z.string().min(1, { message: "FormValidation.required" }),
town: z.string().min(1, { message: "FormValidation.required" }),
department: z.string().min(1, { message: "FormValidation.required" }),
tournament: z.string().min(1, { message: "FormValidation.required" }),
url: z.string().url({ message: "FormValidation.url" }),
time_control: z.nativeEnum(TimeControl),
norm_tournament: z.boolean(),
date: z.date(),
coordinates: z.array(z.number()).length(2),
country: z.string().min(1, { message: "FormValidation.required" }),
}),
});
export const fetchTournamentResultsSchema = z.object({
id: z.string().min(1, { message: "FormValidation.required" }),
});
export const zoneSchema = z
.object({
name: z.string().min(1, { message: "FormValidation.required" }),
features: zu.geojson.featureCollection(),
classicNotifications: z.boolean(),
rapidNotifications: z.boolean(),
blitzNotifications: z.boolean(),
otherNotifications: z.boolean(),
})
.refine((data) => data.features.features.length > 0, {
message: "FormValidation.zone",
path: ["features"],
});
export const fetchClubPlayersSchema = z.object({
clubId: z.string(),
});
const matchPlayerSchema = z.object({
name: z.string(),
elo: z.string(),
nrFFE: z.string(),
});
export const matchSchema = z.object({
competition: z.string(),
date: z.date(),
ronde: z.number(),
lieu: z.string(),
team1: z.string(),
team2: z.string(),
team1_players: z.array(matchPlayerSchema),
team2_players: z.array(matchPlayerSchema),
});