diff options
Diffstat (limited to 'lib/general-contract-template/validations.ts')
| -rw-r--r-- | lib/general-contract-template/validations.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/general-contract-template/validations.ts b/lib/general-contract-template/validations.ts new file mode 100644 index 00000000..5990b45c --- /dev/null +++ b/lib/general-contract-template/validations.ts @@ -0,0 +1,75 @@ +import * as z from "zod";
+import { createSearchParamsCache,
+ parseAsArrayOf,
+ parseAsInteger,
+ parseAsString,
+ parseAsStringEnum
+} from "nuqs/server"
+
+import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"
+import { GeneralContractTemplate } from "@/db/schema";
+
+// Contract Template Schema
+export const contractTemplateSchema = z.object({
+ id: z.number().int().optional(),
+ contractTemplateType: z.string().min(1, "계약종류는 필수입니다."),
+ contractTemplateName: z.string().min(1, "계약문서명은 필수입니다."),
+ revision: z.coerce.number().int().min(1).default(1),
+ status: z.enum(["ACTIVE", "INACTIVE", "DISPOSED"], {
+ required_error: "상태는 필수 선택사항입니다.",
+ invalid_type_error: "올바른 상태 값이 아닙니다."
+ }).default("ACTIVE"),
+ legalReviewRequired: z.boolean().default(false),
+ fileName: z.string().nullable().optional(),
+ filePath: z.string().nullable().optional(),
+ createdAt: z.date().optional(),
+ updatedAt: z.date().optional(),
+ createdBy: z.number().int().nullable().optional(),
+ updatedBy: z.number().int().nullable().optional(),
+ disposedAt: z.date().nullable().optional(),
+ restoredAt: z.date().nullable().optional(),
+});
+
+export const searchParamsTemplatesCache = createSearchParamsCache({
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault(
+ []
+ ),
+ page: parseAsInteger.withDefault(1),
+ perPage: parseAsInteger.withDefault(10),
+ sort: getSortingStateParser<GeneralContractTemplate>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+
+ // advanced filter
+ filters: getFiltersStateParser().withDefault([]),
+ joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+ search: parseAsString.withDefault(""),
+})
+
+export const createContractTemplateSchema = contractTemplateSchema.omit({
+ id: true,
+ createdAt: true,
+ updatedAt: true,
+ createdBy: true,
+ updatedBy: true,
+ disposedAt: true,
+ restoredAt: true,
+});
+
+export const updateContractTemplateSchema = contractTemplateSchema.partial();
+
+export const deleteContractTemplateSchema = z.object({
+ id: z.number(),
+});
+
+export type ContractTemplateSchema = z.infer<typeof contractTemplateSchema>;
+export type CreateContractTemplateSchema = z.infer<typeof createContractTemplateSchema>;
+export type UpdateContractTemplateSchema = z.infer<typeof updateContractTemplateSchema>;
+export type DeleteContractTemplateSchema = z.infer<typeof deleteContractTemplateSchema>;
+export type GetContractTemplatesSchema = {
+ page: number;
+ perPage: number;
+ sort: Array<{ id: string; desc: boolean }>;
+ filters: Array<{ id: string; value: string[] }>;
+ search: string;
+};
\ No newline at end of file |
