import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { Item } from "@/db/schema/items"; export const searchParamsCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault( [] ), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), itemCode: parseAsString.withDefault(""), itemName: parseAsString.withDefault(""), description: parseAsString.withDefault(""), // advanced filter filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) export const createItemSchema = z.object({ itemCode: z.string(), itemName: z.string(), description: z.string(), }) export const updateItemSchema = z.object({ itemCode: z.string(), itemName: z.string().optional(), description: z.string().optional(), }) // 조선 아이템 업데이트 스키마 export const updateShipbuildingItemSchema = z.object({ itemCode: z.string(), itemName: z.string().optional(), description: z.string().optional(), workType: z.string().optional(), shipTypes: z.string().optional(), }) export type GetItemsSchema = Awaited> export type CreateItemSchema = z.infer export type UpdateItemSchema = z.infer export type UpdateShipbuildingItemSchema = z.infer // 조선 아이템 스키마 export const createShipbuildingItemSchema = z.object({ itemCode: z.string(), itemName: z.string(), description: z.string(), workType: z.string(), shipTypes: z.string(), }) export type CreateShipbuildingItemSchema = z.infer // 기본 아이템 생성 데이터 타입 export interface ItemCreateData { itemCode: string itemName: string description: string | null } // 조선 아이템 생성 데이터 타입 export interface ShipbuildingItemCreateData extends ItemCreateData { workType: string | null shipTypes: string | null } // 아이템 타입에 따른 생성 데이터 타입 export type TypedItemCreateData = ShipbuildingItemCreateData