From b67e36df49f067cbd5ba899f9fbcc755f38d4b4f Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 4 Sep 2025 08:31:31 +0000 Subject: (대표님, 최겸, 임수민) 작업사항 커밋 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/rfq-last/validations.ts | 104 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 87 insertions(+), 17 deletions(-) (limited to 'lib/rfq-last/validations.ts') diff --git a/lib/rfq-last/validations.ts b/lib/rfq-last/validations.ts index b133433f..34110141 100644 --- a/lib/rfq-last/validations.ts +++ b/lib/rfq-last/validations.ts @@ -66,22 +66,92 @@ import { RfqLastAttachments } from "@/db/schema"; >; - export const searchParamsRfqAttachmentsCache = createSearchParamsCache({ - flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), - page: parseAsInteger.withDefault(1), - perPage: parseAsInteger.withDefault(10), - sort: getSortingStateParser().withDefault([ - { id: "createdAt", desc: true }, - ]), - // 기본 필터 - attachmentType: parseAsArrayOf(z.string()).withDefault([]), - fileType: parseAsArrayOf(z.string()).withDefault([]), - search: parseAsString.withDefault(""), - // advanced filter - filters: getFiltersStateParser().withDefault([]), - joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), - }) +// 공통 탭 파라미터 +export const searchParamsRfqTabCache = createSearchParamsCache({ + tab: parseAsStringEnum(['design', 'purchase']).withDefault('design'), +}) + +// 설계 탭 전용 파라미터 +export const searchParamsRfqDesignCache = createSearchParamsCache({ + design_page: parseAsInteger.withDefault(1), + design_perPage: parseAsInteger.withDefault(10), + design_sort: getSortingStateParser().withDefault([ + { id: "createdAt", desc: true }, + ]), + design_search: parseAsString.withDefault(""), + design_fileType: parseAsArrayOf(z.string()).withDefault([]), + design_filters: getFiltersStateParser().withDefault([]), + design_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), +}) + +// 구매 탭 전용 파라미터 +export const searchParamsRfqPurchaseCache = createSearchParamsCache({ + purchase_page: parseAsInteger.withDefault(1), + purchase_perPage: parseAsInteger.withDefault(10), + purchase_sort: getSortingStateParser().withDefault([ + { id: "createdAt", desc: true }, + ]), + purchase_search: parseAsString.withDefault(""), + purchase_fileType: parseAsArrayOf(z.string()).withDefault([]), + purchase_filters: getFiltersStateParser().withDefault([]), + purchase_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), +}) + +// 통합 파라미터 캐시 (모든 파라미터를 한 번에 파싱) +export const searchParamsRfqAttachmentsCache = createSearchParamsCache({ + // 공통 + tab: parseAsStringEnum(['design', 'purchase']).withDefault('design'), + flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), - // 스키마 타입들 - export type GetRfqLastAttachmentsSchema = Awaited> + // 설계 탭 파라미터 + design_page: parseAsInteger.withDefault(1), + design_perPage: parseAsInteger.withDefault(10), + design_sort: getSortingStateParser().withDefault([ + { id: "createdAt", desc: true }, + ]), + design_search: parseAsString.withDefault(""), + design_fileType: parseAsArrayOf(z.string()).withDefault([]), + design_filters: getFiltersStateParser().withDefault([]), + design_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), + + // 구매 탭 파라미터 + purchase_page: parseAsInteger.withDefault(1), + purchase_perPage: parseAsInteger.withDefault(10), + purchase_sort: getSortingStateParser().withDefault([ + { id: "createdAt", desc: true }, + ]), + purchase_search: parseAsString.withDefault(""), + purchase_fileType: parseAsArrayOf(z.string()).withDefault([]), + purchase_filters: getFiltersStateParser().withDefault([]), + purchase_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), +}) + +// 타입 정의 +export type GetRfqLastAttachmentsSchema = { + page: number + perPage: number + sort: Array<{ id: string; desc: boolean }> + search: string + fileType: string[] + filters: any[] + joinOperator: "and" | "or" + attachmentType?: string[] +} + +// 헬퍼 함수: prefix가 붙은 파라미터를 일반 파라미터로 변환 +export function extractTabParams( + allParams: Awaited>, + tabPrefix: 'design' | 'purchase' +): GetRfqLastAttachmentsSchema { + const prefix = `${tabPrefix}_` + return { + page: allParams[`${prefix}page` as keyof typeof allParams] as number, + perPage: allParams[`${prefix}perPage` as keyof typeof allParams] as number, + sort: allParams[`${prefix}sort` as keyof typeof allParams] as any, + search: allParams[`${prefix}search` as keyof typeof allParams] as string, + fileType: allParams[`${prefix}fileType` as keyof typeof allParams] as string[], + filters: allParams[`${prefix}filters` as keyof typeof allParams] as any[], + joinOperator: allParams[`${prefix}joinOperator` as keyof typeof allParams] as "and" | "or", + } +} \ No newline at end of file -- cgit v1.2.3