summaryrefslogtreecommitdiff
path: root/lib/vendor-pool/validations.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-pool/validations.ts')
-rw-r--r--lib/vendor-pool/validations.ts92
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/vendor-pool/validations.ts b/lib/vendor-pool/validations.ts
new file mode 100644
index 00000000..642ccc47
--- /dev/null
+++ b/lib/vendor-pool/validations.ts
@@ -0,0 +1,92 @@
+import {
+ createSearchParamsCache,
+ parseAsArrayOf,
+ parseAsInteger,
+ parseAsString,
+ parseAsStringEnum,
+} from "nuqs/server"
+import * as z from "zod"
+
+import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"
+import { VendorPool } from "./types"
+
+export const vendorPoolSearchParamsCache = createSearchParamsCache({
+ // UI 모드나 플래그 관련
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),
+
+ // 페이징
+ page: parseAsInteger.withDefault(1),
+ perPage: parseAsInteger.withDefault(10),
+
+ // 정렬 (등재일 기준 내림차순)
+ sort: getSortingStateParser<VendorPool>().withDefault([
+ { id: "registrationDate", desc: true },
+ ]),
+
+ // Vendor Pool 관련 필드
+ constructionSector: parseAsStringEnum(["조선", "해양"]).withDefault(""), // 공사부문
+ htDivision: parseAsStringEnum(["H", "T"]).withDefault(""), // H/T구분
+ designCategoryCode: parseAsString.withDefault(""), // 설계기능코드
+ designCategory: parseAsString.withDefault(""), // 설계기능(공종)
+ equipBulkDivision: parseAsStringEnum(["E", "B"]).withDefault(""), // Equip/Bulk 구분
+
+ // 패키지/자재 정보
+ packageCode: parseAsString.withDefault(""), // 패키지 코드
+ packageName: parseAsString.withDefault(""), // 패키지 명
+ materialGroupCode: parseAsString.withDefault(""), // 자재그룹 코드
+ materialGroupName: parseAsString.withDefault(""), // 자재그룹 명
+ smCode: parseAsString.withDefault(""), // SM Code
+
+ // 유사자재명
+ similarMaterialNamePurchase: parseAsString.withDefault(""), // 유사자재명 (구매)
+ similarMaterialNameOther: parseAsString.withDefault(""), // 유사자재명 (구매 외)
+
+ // 협력업체 정보
+ vendorCode: parseAsString.withDefault(""), // 협력업체 코드
+ vendorName: parseAsString.withDefault(""), // 협력업체 명
+ taxId: parseAsString.withDefault(""), // 사업자번호
+
+ // 인증/상태 정보
+ faStatus: parseAsString.withDefault(""), // FA현황
+ tier: parseAsString.withDefault(""), // 등급
+ isAgent: parseAsStringEnum(["true", "false"]).withDefault(""), // Agent 여부
+
+ // 계약 정보
+ contractSignerCode: parseAsString.withDefault(""), // 계약서명주체 코드
+ contractSignerName: parseAsString.withDefault(""), // 계약서명주체 명
+
+ // 위치 정보
+ headquarterLocation: parseAsString.withDefault(""), // 본사 위치
+ manufacturingLocation: parseAsString.withDefault(""), // 제작/선적지
+
+ // AVL 정보
+ avlVendorName: parseAsString.withDefault(""), // AVL 등재업체명
+ similarVendorName: parseAsString.withDefault(""), // 유사업체명
+ hasAvl: parseAsStringEnum(["true", "false"]).withDefault(""), // AVL 존재여부
+
+ // 상태 정보
+ isBlacklist: parseAsStringEnum(["true", "false"]).withDefault(""), // Blacklist
+ isBcc: parseAsStringEnum(["true", "false"]).withDefault(""), // BCC
+
+ // eVCP 미등록 정보
+ picName: parseAsString.withDefault(""), // PIC(담당자)
+ picEmail: parseAsString.withDefault(""), // PIC(E-mail)
+ agentName: parseAsString.withDefault(""), // Agent(담당자)
+ agentEmail: parseAsString.withDefault(""), // Agent(E-mail)
+
+ // 실적 정보
+ recentQuoteNumber: parseAsString.withDefault(""), // 최근견적번호
+ recentOrderNumber: parseAsString.withDefault(""), // 최근발주번호
+
+ // 업데이트 히스토리
+ registrant: parseAsString.withDefault(""), // 등재자
+ lastModifier: parseAsString.withDefault(""), // 최종변경자
+
+ // 고급 필터(Advanced) & 검색
+ filters: getFiltersStateParser().withDefault([]),
+ joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+ search: parseAsString.withDefault(""),
+})
+
+// 최종 타입
+export type GetVendorPoolSchema = Awaited<ReturnType<typeof vendorPoolSearchParamsCache.parse>>