diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-13 00:22:54 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-13 00:22:54 +0000 |
| commit | 89274bffa596ffdfc4275fb8d11cdb02ff9a2d02 (patch) | |
| tree | 8597ef56c39ac4913eacdb0fc663b5fe80de127b /lib/contact-possible-items/validations.ts | |
| parent | 00092099271ff743ac195511c03994e80f91a2e9 (diff) | |
(최겸) 기술영업 import 수정 2
Diffstat (limited to 'lib/contact-possible-items/validations.ts')
| -rw-r--r-- | lib/contact-possible-items/validations.ts | 101 |
1 files changed, 42 insertions, 59 deletions
diff --git a/lib/contact-possible-items/validations.ts b/lib/contact-possible-items/validations.ts index 609be0df..e5c301cb 100644 --- a/lib/contact-possible-items/validations.ts +++ b/lib/contact-possible-items/validations.ts @@ -1,59 +1,42 @@ -import { createSearchParamsCache, parseAsInteger, parseAsString } from "nuqs/server"
-import { z } from "zod"
-
-// 검색 파라미터 스키마 (뷰 기반으로 수정)
-export const searchParamsSchema = z.object({
- page: z.coerce.number().default(1),
- per_page: z.coerce.number().default(10),
- sort: z.string().optional(),
- search: z.string().optional(), // 통합 검색
- contactName: z.string().optional(),
- vendorName: z.string().optional(),
- itemCode: z.string().optional(),
- vendorCode: z.string().optional(),
- workType: z.string().optional(),
- from: z.string().optional(),
- to: z.string().optional(),
-})
-
-// searchParams 캐시 생성
-export const searchParamsCache = createSearchParamsCache({
- page: parseAsInteger.withDefault(1),
- per_page: parseAsInteger.withDefault(10),
- sort: parseAsString.withDefault(""),
- search: parseAsString.withDefault(""), // 통합 검색 추가
- contactName: parseAsString.withDefault(""),
- vendorName: parseAsString.withDefault(""),
- itemCode: parseAsString.withDefault(""),
- vendorCode: parseAsString.withDefault(""),
- workType: parseAsString.withDefault(""),
- from: parseAsString.withDefault(""),
- to: parseAsString.withDefault(""),
-})
-
-export type SearchParamsCache = typeof searchParamsCache
-
-// 담당자별 아이템 생성용 스키마 (FK만 사용)
-export const contactPossibleItemSchema = z.object({
- contactId: z.number().min(1, "담당자를 선택해주세요"),
- vendorPossibleItemId: z.number().min(1, "벤더 가능 아이템을 선택해주세요"),
-})
-
-export type ContactPossibleItemSchema = z.infer<typeof contactPossibleItemSchema>
-
-// 조회용 스키마 (searchParamsCache와 일치하도록 수정)
-export const getContactPossibleItemsSchema = z.object({
- page: z.number().default(1),
- per_page: z.number().default(10),
- sort: z.string().optional(),
- search: z.string().optional(),
- contactName: z.string().optional(),
- vendorName: z.string().optional(),
- itemCode: z.string().optional(),
- vendorCode: z.string().optional(),
- workType: z.string().optional(),
- from: z.string().optional(),
- to: z.string().optional(),
-})
-
-export type GetContactPossibleItemsSchema = z.infer<typeof getContactPossibleItemsSchema>
\ No newline at end of file +import { techSalesContactPossibleItems } from "@/db/schema/techSales" +import { + createSearchParamsCache, + parseAsArrayOf, + parseAsInteger, + parseAsString, + parseAsStringEnum, +} from "nuqs/server" +import * as z from "zod" + +import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" + +export const searchParamsCache = createSearchParamsCache({ + flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), + page: parseAsInteger.withDefault(1), + perPage: parseAsInteger.withDefault(10), + sort: getSortingStateParser<typeof techSalesContactPossibleItems.$inferSelect>().withDefault([ + { id: "createdAt", desc: true }, + ]), + + // 기본 필터 + vendorName: parseAsString.withDefault(""), + contactName: parseAsString.withDefault(""), + vendorCode: parseAsString.withDefault(""), + itemCode: parseAsString.withDefault(""), + workType: parseAsString.withDefault(""), + + // 고급 필터 + filters: getFiltersStateParser().withDefault([]), + joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), + search: parseAsString.withDefault(""), +}) + +export type GetContactPossibleItemsSchema = Awaited<ReturnType<typeof searchParamsCache.parse>> + +// 담당자별 아이템 생성용 스키마 (FK만 사용) +export const contactPossibleItemSchema = z.object({ + contactId: z.number().min(1, "담당자를 선택해주세요"), + vendorPossibleItemId: z.number().min(1, "벤더 가능 아이템을 선택해주세요"), +}) + +export type ContactPossibleItemSchema = z.infer<typeof contactPossibleItemSchema>
\ No newline at end of file |
