summaryrefslogtreecommitdiff
path: root/lib/integration/validations.ts
diff options
context:
space:
mode:
author0-Zz-ang <s1998319@gmail.com>2025-07-10 15:56:13 +0900
committer0-Zz-ang <s1998319@gmail.com>2025-07-10 15:56:13 +0900
commit356929b399ef31a4de82906267df438cf29ea59d (patch)
treec353a55c076e987042f99f3dbf1eab54706f6829 /lib/integration/validations.ts
parent25d569828b704a102f681a627c76c4129afa8be3 (diff)
인터페이스 관련 파일 수정
Diffstat (limited to 'lib/integration/validations.ts')
-rw-r--r--lib/integration/validations.ts99
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/integration/validations.ts b/lib/integration/validations.ts
new file mode 100644
index 00000000..4cdf5adc
--- /dev/null
+++ b/lib/integration/validations.ts
@@ -0,0 +1,99 @@
+import {
+ createSearchParamsCache,
+ parseAsArrayOf,
+ parseAsInteger,
+ parseAsString,
+ parseAsStringEnum,
+} from "nuqs/server";
+import * as z from "zod";
+
+import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers";
+import { integrations } from "@/db/schema/integration";
+
+export const SearchParamsCache = createSearchParamsCache({
+ // UI 모드나 플래그 관련
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),
+
+ // 페이징
+ page: parseAsInteger.withDefault(1),
+ perPage: parseAsInteger.withDefault(10),
+
+ // 정렬 (createdAt 기준 내림차순)
+ sort: getSortingStateParser<typeof integrations>().withDefault([
+ { id: "createdAt", desc: true }
+ ]),
+
+ // 기존 필드
+ code: parseAsString.withDefault(""),
+ name: parseAsString.withDefault(""),
+ type: parseAsString.withDefault(""),
+ description: parseAsString.withDefault(""),
+ sourceSystem: parseAsString.withDefault(""),
+ targetSystem: parseAsString.withDefault(""),
+ status: parseAsString.withDefault(""),
+ filters: getFiltersStateParser().withDefault([]),
+ joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+ search: parseAsString.withDefault(""),
+});
+
+export type GetIntegrationsSchema = Awaited<ReturnType<typeof SearchParamsCache.parse>>;
+
+// 통합 타입 정의
+export const integrationTypeEnum = z.enum(["rest_api", "soap", "db_to_db"]);
+export const integrationStatusEnum = z.enum(["active", "inactive", "deprecated"]);
+
+// 통합 생성 스키마
+export const createIntegrationSchema = z.object({
+ code: z.string().min(1, "코드는 필수입니다."),
+ name: z.string().min(1, "이름은 필수입니다."),
+ type: integrationTypeEnum,
+ description: z.string().optional(),
+ sourceSystem: z.string().min(1, "소스 시스템은 필수입니다."),
+ targetSystem: z.string().min(1, "타겟 시스템은 필수입니다."),
+ status: integrationStatusEnum.default("active"),
+ metadata: z.any().optional(),
+});
+
+// 통합 수정 스키마
+export const updateIntegrationSchema = z.object({
+ code: z.string().min(1, "코드는 필수입니다."),
+ name: z.string().min(1, "이름은 필수입니다."),
+ type: integrationTypeEnum,
+ description: z.string().optional(),
+ sourceSystem: z.string().min(1, "소스 시스템은 필수입니다."),
+ targetSystem: z.string().min(1, "타겟 시스템은 필수입니다."),
+ status: integrationStatusEnum,
+ metadata: z.any().optional(),
+});
+
+// 통합 조회 스키마
+export const getIntegrationsSchema = z.object({
+ page: z.number().min(1).default(1),
+ limit: z.number().min(1).max(100).default(10),
+ search: z.string().optional(),
+ type: integrationTypeEnum.optional(),
+ status: integrationStatusEnum.optional(),
+ sourceSystem: z.string().optional(),
+ targetSystem: z.string().optional(),
+});
+
+// 통합 타입
+export type Integration = {
+ id: number;
+ code: string;
+ name: string;
+ type: "rest_api" | "soap" | "db_to_db";
+ description?: string | null;
+ sourceSystem: string;
+ targetSystem: string;
+ status: "active" | "inactive" | "deprecated";
+ metadata?: any;
+ createdBy?: number | null;
+ updatedBy?: number | null;
+ createdAt: Date;
+ updatedAt: Date;
+};
+
+export type CreateIntegrationInput = z.infer<typeof createIntegrationSchema>;
+export type UpdateIntegrationInput = z.infer<typeof updateIntegrationSchema>;
+export type GetIntegrationsInput = z.infer<typeof getIntegrationsSchema>; \ No newline at end of file