diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-04 18:15:39 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-04 18:15:39 +0900 |
| commit | 1a034c7f6f50e443bc9f97c3d84bfb0a819af6ce (patch) | |
| tree | c6546872915ea10c5b94d7c452cba33f89fdf74e | |
| parent | a1710296dbc1881a7ed86093872904a529901430 (diff) | |
(김준회) MDG 자재마스터 테이블 인덱스 추가, MANTR로 MRC Type 반환하는 서버액션 구현
| -rw-r--r-- | db/schema/MDG/mdg.ts | 6 | ||||
| -rw-r--r-- | lib/mdg/actions/material-service.ts | 38 |
2 files changed, 43 insertions, 1 deletions
diff --git a/db/schema/MDG/mdg.ts b/db/schema/MDG/mdg.ts index f4f68a20..bf55a1a0 100644 --- a/db/schema/MDG/mdg.ts +++ b/db/schema/MDG/mdg.ts @@ -1,4 +1,4 @@ -import { pgSchema, integer, varchar, timestamp, text } from 'drizzle-orm/pg-core'; +import { pgSchema, integer, varchar, timestamp, text, index } from 'drizzle-orm/pg-core'; // 테이블이 너무 많아서 별도 스키마로 분리함 export const mdgSchema = pgSchema("mdg"); @@ -948,6 +948,10 @@ export const MATERIAL_MASTER_PART_MATL = mdgSchema.table('MATERIAL_MASTER_PART_M createdAt: timestamp('created_at').defaultNow().notNull(), updatedAt: timestamp('updated_at').defaultNow().notNull(), +}, (table) => { + return { + matnrIdx: index('material_master_part_matl_matnr_idx').on(table.MATNR), + }; }); export const MATERIAL_MASTER_PART_MATL_CHARASGN = mdgSchema.table('MATERIAL_MASTER_PART_MATL_CHARASGN', { diff --git a/lib/mdg/actions/material-service.ts b/lib/mdg/actions/material-service.ts new file mode 100644 index 00000000..76345b13 --- /dev/null +++ b/lib/mdg/actions/material-service.ts @@ -0,0 +1,38 @@ +"use server"; + +import db from "@/db/db"; +import { MATERIAL_MASTER_PART_MATL } from "@/db/schema/MDG/mdg"; +import { eq } from "drizzle-orm"; + +/** + * MATNR(Material Number)로 ZZMRC 값을 조회하는 서버 액션 + * @param matnr - 자재 번호 (Material Number) + * @returns ZZMRC 값 또는 null + */ +export async function getMrcTypeByMatnr(matnr: string): Promise<string | null> { + try { + if (!matnr || matnr.trim() === '') { + console.warn('getMrcTypeByMatnr: MATNR이 제공되지 않았습니다.'); + return null; + } + + const result = await db + .select({ + zzmrc: MATERIAL_MASTER_PART_MATL.ZZMRC, + }) + .from(MATERIAL_MASTER_PART_MATL) + .where(eq(MATERIAL_MASTER_PART_MATL.MATNR, matnr)) + .limit(1); + + if (result.length === 0) { + console.warn(`getMrcTypeByMatnr: MATNR ${matnr}에 해당하는 데이터를 찾을 수 없습니다.`); + return null; + } + + return result[0].zzmrc; + } catch (error) { + console.error('getMrcTypeByMatnr 조회 오류:', error); + throw new Error(`ZZMRC 조회 중 오류가 발생했습니다: ${error instanceof Error ? error.message : 'Unknown error'}`); + } +} + |
