summaryrefslogtreecommitdiff
path: root/lib/general-contract-template/validations.ts
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-09-12 08:01:02 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-09-12 08:01:02 +0000
commita9575387c3a765a1a65ebc179dae16a21af6eb25 (patch)
tree347f2b17b07039080fb2f116460004ba0b75a779 /lib/general-contract-template/validations.ts
parent47e527f5f763658600696ee58451fb666e692f5a (diff)
(임수민) 일반 계약 템플릿 구현 및 basic contract 필터 수정
Diffstat (limited to 'lib/general-contract-template/validations.ts')
-rw-r--r--lib/general-contract-template/validations.ts75
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