diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-04-28 02:13:30 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-04-28 02:13:30 +0000 |
| commit | ef4c533ebacc2cdc97e518f30e9a9350004fcdfb (patch) | |
| tree | 345251a3ed0f4429716fa5edaa31024d8f4cb560 /lib/basic-contract/validations.ts | |
| parent | 9ceed79cf32c896f8a998399bf1b296506b2cd4a (diff) | |
~20250428 작업사항
Diffstat (limited to 'lib/basic-contract/validations.ts')
| -rw-r--r-- | lib/basic-contract/validations.ts | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/basic-contract/validations.ts b/lib/basic-contract/validations.ts new file mode 100644 index 00000000..5a5bf5b8 --- /dev/null +++ b/lib/basic-contract/validations.ts @@ -0,0 +1,87 @@ +import * as z from "zod";
+import { createSearchParamsCache,
+ parseAsArrayOf,
+ parseAsInteger,
+ parseAsString,
+ parseAsStringEnum,parseAsBoolean
+} from "nuqs/server"
+
+import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"
+import { BasicContractTemplate, BasicContractView } from "@/db/schema";
+
+export const basicContractTemplateSchema = z.object({
+ templateName: z.string().min(1, "템플릿 이름은 필수입니다."),
+
+ // 유효기간을 숫자로 변경하고 적절한 검증 추가
+ validityPeriod: z.coerce
+ .number({
+ required_error: "유효기간은 필수입니다.",
+ invalid_type_error: "유효기간은 숫자여야 합니다."
+ })
+ .int("유효기간은 정수여야 합니다.")
+ .min(1, "유효기간은 최소 1개월 이상이어야 합니다.")
+ .max(120, "유효기간은 최대 120개월(10년)을 초과할 수 없습니다.")
+ .default(12) // 기본값 1년(12개월)
+ .describe("계약 유효기간(개월)"),
+
+ status: z.enum(["ACTIVE", "INACTIVE"], {
+ required_error: "상태는 필수 선택사항입니다.",
+ invalid_type_error: "올바른 상태 값이 아닙니다."
+ }).default("ACTIVE"),
+
+ fileName: z.string().min(1, "파일 이름은 필수입니다."),
+ filePath: z.string().min(1, "파일 경로는 필수입니다."),
+});
+
+export const searchParamsTemplatesCache = createSearchParamsCache({
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault(
+ []
+ ),
+ page: parseAsInteger.withDefault(1),
+ perPage: parseAsInteger.withDefault(10),
+ sort: getSortingStateParser<BasicContractTemplate>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+
+ // advanced filter
+ filters: getFiltersStateParser().withDefault([]),
+ joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+ search: parseAsString.withDefault(""),
+
+})
+
+
+export const createBasicContractTemplateSchema = basicContractTemplateSchema.extend({});
+
+export const updateBasicContractTemplateSchema = basicContractTemplateSchema.partial().extend({
+ id: z.number(),
+});
+
+export const deleteBasicContractTemplateSchema = z.object({
+ id: z.number(),
+});
+
+export type GetBasicContractTemplatesSchema = Awaited<ReturnType<typeof searchParamsTemplatesCache.parse>>
+
+
+export type CreateBasicContractTemplateSchema = z.infer<typeof createBasicContractTemplateSchema>;
+export type UpdateBasicContractTemplateSchema = z.infer<typeof updateBasicContractTemplateSchema>;
+export type DeleteBasicContractTemplateSchema = z.infer<typeof deleteBasicContractTemplateSchema>;
+
+
+export const searchParamsCache = createSearchParamsCache({
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),
+ page: parseAsInteger.withDefault(1),
+ perPage: parseAsInteger.withDefault(10),
+ sort: getSortingStateParser<BasicContractView>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+
+ // 고급 필터
+ filters: getFiltersStateParser().withDefault([]),
+ joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+ search: parseAsString.withDefault(""),
+
+});
+
+export type GetBasciContractsSchema = Awaited<ReturnType<typeof searchParamsCache.parse>>;
|
