diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-17 09:08:16 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-17 09:08:16 +0000 |
| commit | f7117370b9cc0c7b96bd1eb23a1b9f5b16cc8ceb (patch) | |
| tree | 4efb0a5ce420b44a402810fc19c35afc92ec5271 /lib/material-groups/services.ts | |
| parent | c54e2acaed641b7ae2c1a7304b08626f9ca973db (diff) | |
| parent | 7433eea5b4bbc0899e255b88e1a7e91f26e9d95b (diff) | |
Merge branch 'dujinkim' of https://github.com/DTS-Development/SHI_EVCP into dujinkim
Diffstat (limited to 'lib/material-groups/services.ts')
| -rw-r--r-- | lib/material-groups/services.ts | 67 |
1 files changed, 39 insertions, 28 deletions
diff --git a/lib/material-groups/services.ts b/lib/material-groups/services.ts index be683077..3ee9886d 100644 --- a/lib/material-groups/services.ts +++ b/lib/material-groups/services.ts @@ -3,10 +3,10 @@ import { and, asc, desc, ilike, or, sql, eq } from 'drizzle-orm'; import db from '@/db/db'; import { filterColumns } from "@/lib/filter-columns"; -import { materialSearchView } from "@/db/schema/items"; +import { MATERIAL_GROUP_MASTER } from "@/db/schema/MDG/mdg"; -// 자재그룹 뷰의 컬럼 타입 정의 -type MaterialGroupColumn = keyof typeof materialSearchView.$inferSelect; +// 자재그룹 테이블의 컬럼 타입 정의 +type MaterialGroupColumn = keyof typeof MATERIAL_GROUP_MASTER.$inferSelect; export interface GetMaterialGroupsInput { page: number; @@ -16,13 +16,16 @@ export interface GetMaterialGroupsInput { id: MaterialGroupColumn; desc: boolean; }>; - filters?: any[]; + filters?: Array<{ + id: string; + value: unknown; + }>; joinOperator: 'and' | 'or'; } /** - * 자재그룹 목록을 조회합니다. - * materialSearchView를 사용하여 MATKL(자재그룹코드)와 ATWTB(자재그룹 설명)의 고유한 조합을 조회 + * 자재그룹 목록을 조회 + * 자재그룹코드/자재그룹명/UOM 조회 */ export async function getMaterialGroups(input: GetMaterialGroupsInput) { const safePerPage = Math.min(input.perPage, 100); @@ -32,8 +35,8 @@ export async function getMaterialGroups(input: GetMaterialGroupsInput) { // 고급 필터링 const advancedWhere = filterColumns({ - table: materialSearchView, - filters: (input.filters || []) as any, + table: MATERIAL_GROUP_MASTER, + filters: input.filters || [], joinOperator: input.joinOperator, }); @@ -42,8 +45,9 @@ export async function getMaterialGroups(input: GetMaterialGroupsInput) { if (input.search) { const s = `%${input.search}%`; globalWhere = or( - ilike(materialSearchView.materialGroupCode, s), // 자재그룹코드 - ilike(materialSearchView.materialGroupDesc, s), // 자재그룹명 + ilike(MATERIAL_GROUP_MASTER.materialGroupCode, s), // 자재그룹코드 + ilike(MATERIAL_GROUP_MASTER.materialGroupDescription, s), // 자재그룹명 + ilike(MATERIAL_GROUP_MASTER.materialGroupUom, s), // UOM ); } @@ -52,19 +56,20 @@ export async function getMaterialGroups(input: GetMaterialGroupsInput) { // 정렬 처리 - 타입 안전하게 처리 const orderBy = input.sort.length > 0 ? input.sort.map((item) => { - const column = materialSearchView[item.id]; + const column = MATERIAL_GROUP_MASTER[item.id]; return item.desc ? desc(column) : asc(column); }) - : [asc(materialSearchView.materialGroupCode)]; + : [asc(MATERIAL_GROUP_MASTER.materialGroupCode)]; // 데이터 조회 const { data, total } = await db.transaction(async (tx) => { const data = await tx .select({ - materialGroupCode: materialSearchView.materialGroupCode, - materialGroupDesc: materialSearchView.materialGroupDesc, + materialGroupCode: MATERIAL_GROUP_MASTER.materialGroupCode, + materialGroupDescription: MATERIAL_GROUP_MASTER.materialGroupDescription, + materialGroupUom: MATERIAL_GROUP_MASTER.materialGroupUom, }) - .from(materialSearchView) + .from(MATERIAL_GROUP_MASTER) .where(finalWhere) .orderBy(...orderBy) .offset(offset) @@ -74,7 +79,7 @@ export async function getMaterialGroups(input: GetMaterialGroupsInput) { .select({ count: sql<number>`count(*)` }) - .from(materialSearchView) + .from(MATERIAL_GROUP_MASTER) .where(finalWhere); const total = Number(totalResult[0]?.count) || 0; @@ -100,8 +105,8 @@ export async function getMaterialGroupsInfinite(input: GetMaterialGroupsInfinite try { // 고급 필터링 const advancedWhere = filterColumns({ - table: materialSearchView, - filters: (input.filters || []) as any, + table: MATERIAL_GROUP_MASTER, + filters: input.filters || [], joinOperator: input.joinOperator || "and", }); @@ -110,8 +115,9 @@ export async function getMaterialGroupsInfinite(input: GetMaterialGroupsInfinite if (input.search) { const s = `%${input.search}%`; globalWhere = or( - ilike(materialSearchView.materialGroupCode, s), - ilike(materialSearchView.materialGroupDesc, s), + ilike(MATERIAL_GROUP_MASTER.materialGroupCode, s), + ilike(MATERIAL_GROUP_MASTER.materialGroupDescription, s), + ilike(MATERIAL_GROUP_MASTER.materialGroupUom, s), ); } @@ -120,18 +126,19 @@ export async function getMaterialGroupsInfinite(input: GetMaterialGroupsInfinite // 정렬 처리 - 타입 안전하게 처리 const orderBy = input.sort.length > 0 ? input.sort.map((item) => { - const column = materialSearchView[item.id]; + const column = MATERIAL_GROUP_MASTER[item.id]; return item.desc ? desc(column) : asc(column); }) - : [asc(materialSearchView.materialGroupCode)]; + : [asc(MATERIAL_GROUP_MASTER.materialGroupCode)]; // 전체 데이터 조회 (클라이언트에서 가상화 처리) const data = await db .select({ - materialGroupCode: materialSearchView.materialGroupCode, - materialGroupDesc: materialSearchView.materialGroupDesc, + materialGroupCode: MATERIAL_GROUP_MASTER.materialGroupCode, + materialGroupDescription: MATERIAL_GROUP_MASTER.materialGroupDescription, + materialGroupUom: MATERIAL_GROUP_MASTER.materialGroupUom, }) - .from(materialSearchView) + .from(MATERIAL_GROUP_MASTER) .where(finalWhere) .orderBy(...orderBy); @@ -148,9 +155,13 @@ export async function getMaterialGroupsInfinite(input: GetMaterialGroupsInfinite export async function getMaterialGroupDetail(materialGroupCode: string) { try { const materialGroup = await db - .select() - .from(materialSearchView) - .where(eq(materialSearchView.materialGroupCode, materialGroupCode)) + .select({ + materialGroupCode: MATERIAL_GROUP_MASTER.materialGroupCode, + materialGroupDescription: MATERIAL_GROUP_MASTER.materialGroupDescription, + materialGroupUom: MATERIAL_GROUP_MASTER.materialGroupUom, + }) + .from(MATERIAL_GROUP_MASTER) + .where(eq(MATERIAL_GROUP_MASTER.materialGroupCode, materialGroupCode)) .limit(1); return materialGroup.length > 0 ? materialGroup[0] : null; |
