diff options
Diffstat (limited to 'lib/items/service.ts')
| -rw-r--r-- | lib/items/service.ts | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/lib/items/service.ts b/lib/items/service.ts index 1b6d7e09..1eab3e25 100644 --- a/lib/items/service.ts +++ b/lib/items/service.ts @@ -9,7 +9,7 @@ import { filterColumns } from "@/lib/filter-columns"; import { unstable_cache } from "@/lib/unstable-cache"; import { getErrorMessage } from "@/lib/handle-error"; -import { asc, desc, ilike, inArray, and, gte, lte, not, or ,eq} from "drizzle-orm"; +import { asc, desc, ilike, inArray, and, gte, lte, not, or, eq, isNull, ne, gt } from "drizzle-orm"; import { CreateItemSchema, GetItemsSchema, UpdateItemSchema } from "./validations"; import { Item, items } from "@/db/schema/items"; import { countItems, deleteItemById, deleteItemsByIds, findAllItems, insertItem, selectItems, updateItem } from "./repository"; @@ -417,3 +417,43 @@ export async function getAllItems(): Promise<Item[]> { throw new Error("Failed to get items"); } } + +// PQ용 아이템 검색 함수 +export async function searchItemsForPQ(query: string): Promise<{ itemCode: string; itemName: string }[]> { + unstable_noStore(); + + try { + if (!query || query.trim().length < 1) { + return []; + } + + const searchQuery = `%${query.trim()}%`; + + const results = await db + .select({ + itemCode: items.itemCode, + itemName: items.itemName, + }) + .from(items) + .where( + and( + or( + ilike(items.itemCode, searchQuery), + ilike(items.itemName, searchQuery) + ), + // 삭제되지 않은 아이템만 + or( + isNull(items.deleteFlag), + ne(items.deleteFlag, 'Y') + ) + ) + ) + .limit(20) // 최대 20개 결과만 반환 + .orderBy(asc(items.itemCode)); + + return results; + } catch (err) { + console.error("PQ 아이템 검색 오류:", err); + return []; + } +} |
