summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-04 18:15:39 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-04 18:15:39 +0900
commit1a034c7f6f50e443bc9f97c3d84bfb0a819af6ce (patch)
treec6546872915ea10c5b94d7c452cba33f89fdf74e
parenta1710296dbc1881a7ed86093872904a529901430 (diff)
(김준회) MDG 자재마스터 테이블 인덱스 추가, MANTR로 MRC Type 반환하는 서버액션 구현
-rw-r--r--db/schema/MDG/mdg.ts6
-rw-r--r--lib/mdg/actions/material-service.ts38
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'}`);
+ }
+}
+