mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-27 01:37:19 -05:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { z } from "zod";
|
|
import { mainWeaponIds } from "~/modules/in-game-lists/weapon-ids";
|
|
import { id, processMany, removeDuplicates, safeJSONParse } from "~/utils/zod";
|
|
import { TOURNAMENT_SUB } from "./tournament-subs-constants";
|
|
|
|
export const subSchema = z.object({
|
|
canVc: z.coerce.number().int().min(0).max(2),
|
|
bestWeapons: z.preprocess(
|
|
processMany(safeJSONParse, removeDuplicates),
|
|
z
|
|
.array(
|
|
z
|
|
.number()
|
|
.refine((val) =>
|
|
mainWeaponIds.includes(val as (typeof mainWeaponIds)[number]),
|
|
),
|
|
)
|
|
.min(1)
|
|
.max(TOURNAMENT_SUB.WEAPON_POOL_MAX_SIZE),
|
|
),
|
|
okWeapons: z.preprocess(
|
|
processMany(safeJSONParse, removeDuplicates),
|
|
z
|
|
.array(
|
|
z
|
|
.number()
|
|
.refine((val) =>
|
|
mainWeaponIds.includes(val as (typeof mainWeaponIds)[number]),
|
|
),
|
|
)
|
|
.max(TOURNAMENT_SUB.WEAPON_POOL_MAX_SIZE),
|
|
),
|
|
message: z.string().max(TOURNAMENT_SUB.MESSAGE_MAX_LENGTH).nullish(),
|
|
visibility: z.enum(["+1", "+2", "+3", "ALL"]).default("ALL"),
|
|
});
|
|
|
|
export const deleteSubSchema = z.object({
|
|
userId: id,
|
|
});
|