mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-06-01 00:13:20 -05:00
* Initial * CSS lint * Test CI * Add 1v1, 2v2, and 3v3 Tags (#1771) * Initial * CSS lint * Test CI * Rename step --------- Co-authored-by: xi <104683822+ximk@users.noreply.github.com>
48 lines
914 B
TypeScript
48 lines
914 B
TypeScript
import { z } from "zod";
|
|
import {
|
|
checkboxValueToDbBoolean,
|
|
dbBoolean,
|
|
falsyToNull,
|
|
id,
|
|
processMany,
|
|
removeDuplicates,
|
|
safeJSONParse,
|
|
} from "~/utils/zod";
|
|
import { ART } from "./art-constants";
|
|
|
|
const description = z.preprocess(
|
|
falsyToNull,
|
|
z.string().max(ART.DESCRIPTION_MAX_LENGTH).nullable(),
|
|
);
|
|
const linkedUsers = z.preprocess(
|
|
processMany(safeJSONParse, removeDuplicates),
|
|
z.array(id).max(ART.LINKED_USERS_MAX_LENGTH),
|
|
);
|
|
const tags = z.preprocess(
|
|
safeJSONParse,
|
|
z
|
|
.array(
|
|
z.object({
|
|
name: z.string().min(1).max(ART.TAG_MAX_LENGTH).optional(),
|
|
id: id.optional(),
|
|
}),
|
|
)
|
|
.max(ART.TAG_MAX_LENGTH),
|
|
);
|
|
export const newArtSchema = z.object({
|
|
description,
|
|
linkedUsers,
|
|
tags,
|
|
});
|
|
|
|
export const editArtSchema = z.object({
|
|
description,
|
|
linkedUsers,
|
|
tags,
|
|
isShowcase: z.preprocess(checkboxValueToDbBoolean, dbBoolean),
|
|
});
|
|
|
|
export const deleteArtSchema = z.object({
|
|
id,
|
|
});
|