diff options
Diffstat (limited to 'lib/vendor-pool/validations.ts')
| -rw-r--r-- | lib/vendor-pool/validations.ts | 92 |
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>> |
