Merge pull request 'node-nonquery' (#10) from node-nonquery into dev
Reviewed-on: http://39.117.244.52:3000/kjs/ERP-node/pulls/10
This commit is contained in:
commit
b58cfc3db8
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -2,7 +2,6 @@ import { Request, Response } from "express";
|
|||
import { logger } from "../utils/logger";
|
||||
import { AuthenticatedRequest } from "../types/auth";
|
||||
import { MultiLangService } from "../services/multilangService";
|
||||
import { Client } from "pg";
|
||||
import {
|
||||
CreateLanguageRequest,
|
||||
UpdateLanguageRequest,
|
||||
|
|
@ -25,29 +24,16 @@ export const getLanguages = async (
|
|||
try {
|
||||
logger.info("언어 목록 조회 요청", { user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
const languages = await multiLangService.getLanguages();
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "언어 목록 조회 성공",
|
||||
data: languages,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const languages = await multiLangService.getLanguages();
|
||||
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "언어 목록 조회 성공",
|
||||
data: languages,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("언어 목록 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -90,33 +76,20 @@ export const createLanguage = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const createdLanguage = await multiLangService.createLanguage({
|
||||
...languageData,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 생성되었습니다.",
|
||||
data: createdLanguage,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const createdLanguage = await multiLangService.createLanguage({
|
||||
...languageData,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 생성되었습니다.",
|
||||
data: createdLanguage,
|
||||
};
|
||||
|
||||
res.status(201).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(201).json(response);
|
||||
} catch (error) {
|
||||
logger.error("언어 생성 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -144,32 +117,19 @@ export const updateLanguage = async (
|
|||
|
||||
logger.info("언어 수정 요청", { langCode, languageData, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const updatedLanguage = await multiLangService.updateLanguage(langCode, {
|
||||
...languageData,
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 수정되었습니다.",
|
||||
data: updatedLanguage,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const updatedLanguage = await multiLangService.updateLanguage(langCode, {
|
||||
...languageData,
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 수정되었습니다.",
|
||||
data: updatedLanguage,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("언어 수정 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -195,29 +155,16 @@ export const toggleLanguage = async (
|
|||
const { langCode } = req.params;
|
||||
logger.info("언어 상태 토글 요청", { langCode, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
const result = await multiLangService.toggleLanguage(langCode);
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: `언어가 ${result}되었습니다.`,
|
||||
data: result,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const result = await multiLangService.toggleLanguage(langCode);
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: `언어가 ${result}되었습니다.`,
|
||||
data: result,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("언어 상태 토글 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -246,34 +193,21 @@ export const getLangKeys = async (
|
|||
user: req.user,
|
||||
});
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const langKeys = await multiLangService.getLangKeys({
|
||||
companyCode: companyCode as string,
|
||||
menuCode: menuCode as string,
|
||||
keyType: keyType as string,
|
||||
searchText: searchText as string,
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "다국어 키 목록 조회 성공",
|
||||
data: langKeys,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const langKeys = await multiLangService.getLangKeys({
|
||||
companyCode: companyCode as string,
|
||||
menuCode: menuCode as string,
|
||||
keyType: keyType as string,
|
||||
searchText: searchText as string,
|
||||
});
|
||||
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "다국어 키 목록 조회 성공",
|
||||
data: langKeys,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 키 목록 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -299,29 +233,16 @@ export const getLangTexts = async (
|
|||
const { keyId } = req.params;
|
||||
logger.info("다국어 텍스트 조회 요청", { keyId, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
const langTexts = await multiLangService.getLangTexts(parseInt(keyId));
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트 조회 성공",
|
||||
data: langTexts,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const langTexts = await multiLangService.getLangTexts(parseInt(keyId));
|
||||
|
||||
const response: ApiResponse<any[]> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트 조회 성공",
|
||||
data: langTexts,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 텍스트 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -360,33 +281,20 @@ export const createLangKey = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const keyId = await multiLangService.createLangKey({
|
||||
...keyData,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<number> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 생성되었습니다.",
|
||||
data: keyId,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const keyId = await multiLangService.createLangKey({
|
||||
...keyData,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
const response: ApiResponse<number> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 생성되었습니다.",
|
||||
data: keyId,
|
||||
};
|
||||
|
||||
res.status(201).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(201).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 키 생성 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -414,32 +322,19 @@ export const updateLangKey = async (
|
|||
|
||||
logger.info("다국어 키 수정 요청", { keyId, keyData, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
await multiLangService.updateLangKey(parseInt(keyId), {
|
||||
...keyData,
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 수정되었습니다.",
|
||||
data: "수정 완료",
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
await multiLangService.updateLangKey(parseInt(keyId), {
|
||||
...keyData,
|
||||
updatedBy: req.user?.userId || "system",
|
||||
});
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 수정되었습니다.",
|
||||
data: "수정 완료",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 키 수정 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -465,29 +360,16 @@ export const deleteLangKey = async (
|
|||
const { keyId } = req.params;
|
||||
logger.info("다국어 키 삭제 요청", { keyId, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
await multiLangService.deleteLangKey(parseInt(keyId));
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 삭제되었습니다.",
|
||||
data: "삭제 완료",
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
await multiLangService.deleteLangKey(parseInt(keyId));
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 키가 성공적으로 삭제되었습니다.",
|
||||
data: "삭제 완료",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 키 삭제 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -513,29 +395,16 @@ export const toggleLangKey = async (
|
|||
const { keyId } = req.params;
|
||||
logger.info("다국어 키 상태 토글 요청", { keyId, user: req.user });
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
const result = await multiLangService.toggleLangKey(parseInt(keyId));
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: `다국어 키가 ${result}되었습니다.`,
|
||||
data: result,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const result = await multiLangService.toggleLangKey(parseInt(keyId));
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: `다국어 키가 ${result}되었습니다.`,
|
||||
data: result,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 키 상태 토글 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -580,35 +449,22 @@ export const saveLangTexts = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
await multiLangService.saveLangTexts(parseInt(keyId), {
|
||||
texts: textData.texts.map((text) => ({
|
||||
...text,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
})),
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트가 성공적으로 저장되었습니다.",
|
||||
data: "저장 완료",
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
await multiLangService.saveLangTexts(parseInt(keyId), {
|
||||
texts: textData.texts.map((text) => ({
|
||||
...text,
|
||||
createdBy: req.user?.userId || "system",
|
||||
updatedBy: req.user?.userId || "system",
|
||||
})),
|
||||
});
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트가 성공적으로 저장되었습니다.",
|
||||
data: "저장 완료",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 텍스트 저장 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -654,34 +510,21 @@ export const getUserText = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const langText = await multiLangService.getUserText({
|
||||
companyCode,
|
||||
menuCode,
|
||||
langKey,
|
||||
userLang: userLang as string,
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "사용자별 다국어 텍스트 조회 성공",
|
||||
data: langText,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const langText = await multiLangService.getUserText({
|
||||
companyCode,
|
||||
menuCode,
|
||||
langKey,
|
||||
userLang: userLang as string,
|
||||
});
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "사용자별 다국어 텍스트 조회 성공",
|
||||
data: langText,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("사용자별 다국어 텍스트 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -713,33 +556,20 @@ export const getLangText = async (
|
|||
user: req.user,
|
||||
});
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
const langText = await multiLangService.getLangText(
|
||||
companyCode,
|
||||
langKey,
|
||||
langCode
|
||||
);
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "특정 키의 다국어 텍스트 조회 성공",
|
||||
data: langText,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const langText = await multiLangService.getLangText(
|
||||
companyCode,
|
||||
langKey,
|
||||
langCode
|
||||
);
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "특정 키의 다국어 텍스트 조회 성공",
|
||||
data: langText,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("특정 키의 다국어 텍스트 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -777,29 +607,16 @@ export const deleteLanguage = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
});
|
||||
const multiLangService = new MultiLangService();
|
||||
await multiLangService.deleteLanguage(langCode);
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 삭제되었습니다.",
|
||||
data: "삭제 완료",
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
await multiLangService.deleteLanguage(langCode);
|
||||
|
||||
const response: ApiResponse<string> = {
|
||||
success: true,
|
||||
message: "언어가 성공적으로 삭제되었습니다.",
|
||||
data: "삭제 완료",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("언어 삭제 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
@ -866,34 +683,21 @@ export const getBatchTranslations = async (
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString:
|
||||
process.env.DATABASE_URL ||
|
||||
"postgresql://postgres:postgres@localhost:5432/ilshin",
|
||||
const multiLangService = new MultiLangService();
|
||||
const translations = await multiLangService.getBatchTranslations({
|
||||
companyCode: finalCompanyCode as string,
|
||||
menuCode: finalMenuCode as string,
|
||||
userLang: finalUserLang as string,
|
||||
langKeys,
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
const response: ApiResponse<Record<string, string>> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트 배치 조회 성공",
|
||||
data: translations,
|
||||
};
|
||||
|
||||
try {
|
||||
const multiLangService = new MultiLangService(client);
|
||||
const translations = await multiLangService.getBatchTranslations({
|
||||
companyCode: finalCompanyCode as string,
|
||||
menuCode: finalMenuCode as string,
|
||||
userLang: finalUserLang as string,
|
||||
langKeys,
|
||||
});
|
||||
|
||||
const response: ApiResponse<Record<string, string>> = {
|
||||
success: true,
|
||||
message: "다국어 텍스트 배치 조회 성공",
|
||||
data: translations,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("다국어 텍스트 배치 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import { Request, Response } from "express";
|
|||
import { logger } from "../utils/logger";
|
||||
import { AuthenticatedRequest } from "../types/auth";
|
||||
import { ApiResponse } from "../types/common";
|
||||
import { Client } from "pg";
|
||||
import { TableManagementService } from "../services/tableManagementService";
|
||||
import {
|
||||
TableInfo,
|
||||
|
|
@ -23,29 +22,18 @@ export async function getTableList(
|
|||
try {
|
||||
logger.info("=== 테이블 목록 조회 시작 ===");
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
const tableList = await tableManagementService.getTableList();
|
||||
|
||||
await client.connect();
|
||||
logger.info(`테이블 목록 조회 결과: ${tableList.length}개`);
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
const tableList = await tableManagementService.getTableList();
|
||||
const response: ApiResponse<TableInfo[]> = {
|
||||
success: true,
|
||||
message: "테이블 목록을 성공적으로 조회했습니다.",
|
||||
data: tableList,
|
||||
};
|
||||
|
||||
logger.info(`테이블 목록 조회 결과: ${tableList.length}개`);
|
||||
|
||||
const response: ApiResponse<TableInfo[]> = {
|
||||
success: true,
|
||||
message: "테이블 목록을 성공적으로 조회했습니다.",
|
||||
data: tableList,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("테이블 목록 조회 중 오류 발생:", error);
|
||||
|
||||
|
|
@ -86,29 +74,18 @@ export async function getColumnList(
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
const columnList = await tableManagementService.getColumnList(tableName);
|
||||
|
||||
await client.connect();
|
||||
logger.info(`컬럼 정보 조회 결과: ${tableName}, ${columnList.length}개`);
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
const columnList = await tableManagementService.getColumnList(tableName);
|
||||
const response: ApiResponse<ColumnTypeInfo[]> = {
|
||||
success: true,
|
||||
message: "컬럼 목록을 성공적으로 조회했습니다.",
|
||||
data: columnList,
|
||||
};
|
||||
|
||||
logger.info(`컬럼 정보 조회 결과: ${tableName}, ${columnList.length}개`);
|
||||
|
||||
const response: ApiResponse<ColumnTypeInfo[]> = {
|
||||
success: true,
|
||||
message: "컬럼 목록을 성공적으로 조회했습니다.",
|
||||
data: columnList,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("컬럼 정보 조회 중 오류 발생:", error);
|
||||
|
||||
|
|
@ -164,32 +141,21 @@ export async function updateColumnSettings(
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
await tableManagementService.updateColumnSettings(
|
||||
tableName,
|
||||
columnName,
|
||||
settings
|
||||
);
|
||||
|
||||
await client.connect();
|
||||
logger.info(`컬럼 설정 업데이트 완료: ${tableName}.${columnName}`);
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
await tableManagementService.updateColumnSettings(
|
||||
tableName,
|
||||
columnName,
|
||||
settings
|
||||
);
|
||||
const response: ApiResponse<null> = {
|
||||
success: true,
|
||||
message: "컬럼 설정을 성공적으로 저장했습니다.",
|
||||
};
|
||||
|
||||
logger.info(`컬럼 설정 업데이트 완료: ${tableName}.${columnName}`);
|
||||
|
||||
const response: ApiResponse<null> = {
|
||||
success: true,
|
||||
message: "컬럼 설정을 성공적으로 저장했습니다.",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("컬럼 설정 업데이트 중 오류 발생:", error);
|
||||
|
||||
|
|
@ -245,33 +211,22 @@ export async function updateAllColumnSettings(
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
await tableManagementService.updateAllColumnSettings(
|
||||
tableName,
|
||||
columnSettings
|
||||
);
|
||||
|
||||
await client.connect();
|
||||
logger.info(
|
||||
`전체 컬럼 설정 일괄 업데이트 완료: ${tableName}, ${columnSettings.length}개`
|
||||
);
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
await tableManagementService.updateAllColumnSettings(
|
||||
tableName,
|
||||
columnSettings
|
||||
);
|
||||
const response: ApiResponse<null> = {
|
||||
success: true,
|
||||
message: "모든 컬럼 설정을 성공적으로 저장했습니다.",
|
||||
};
|
||||
|
||||
logger.info(
|
||||
`전체 컬럼 설정 일괄 업데이트 완료: ${tableName}, ${columnSettings.length}개`
|
||||
);
|
||||
|
||||
const response: ApiResponse<null> = {
|
||||
success: true,
|
||||
message: "모든 컬럼 설정을 성공적으로 저장했습니다.",
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("전체 컬럼 설정 일괄 업데이트 중 오류 발생:", error);
|
||||
|
||||
|
|
@ -312,43 +267,31 @@ export async function getTableLabels(
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
const tableLabels = await tableManagementService.getTableLabels(tableName);
|
||||
|
||||
await client.connect();
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
const tableLabels =
|
||||
await tableManagementService.getTableLabels(tableName);
|
||||
|
||||
if (!tableLabels) {
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "테이블 라벨 정보를 찾을 수 없습니다.",
|
||||
error: {
|
||||
code: "TABLE_LABELS_NOT_FOUND",
|
||||
details: `테이블 ${tableName}의 라벨 정보가 존재하지 않습니다.`,
|
||||
},
|
||||
};
|
||||
res.status(404).json(response);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info(`테이블 라벨 정보 조회 완료: ${tableName}`);
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "테이블 라벨 정보를 성공적으로 조회했습니다.",
|
||||
data: tableLabels,
|
||||
if (!tableLabels) {
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "테이블 라벨 정보를 찾을 수 없습니다.",
|
||||
error: {
|
||||
code: "TABLE_LABELS_NOT_FOUND",
|
||||
details: `테이블 ${tableName}의 라벨 정보가 존재하지 않습니다.`,
|
||||
},
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
res.status(404).json(response);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info(`테이블 라벨 정보 조회 완료: ${tableName}`);
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "테이블 라벨 정보를 성공적으로 조회했습니다.",
|
||||
data: tableLabels,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("테이블 라벨 정보 조회 중 오류 발생:", error);
|
||||
|
||||
|
|
@ -389,45 +332,34 @@ export async function getColumnLabels(
|
|||
return;
|
||||
}
|
||||
|
||||
// PostgreSQL 클라이언트 생성
|
||||
const client = new Client({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
});
|
||||
const tableManagementService = new TableManagementService();
|
||||
const columnLabels = await tableManagementService.getColumnLabels(
|
||||
tableName,
|
||||
columnName
|
||||
);
|
||||
|
||||
await client.connect();
|
||||
|
||||
try {
|
||||
const tableManagementService = new TableManagementService(client);
|
||||
const columnLabels = await tableManagementService.getColumnLabels(
|
||||
tableName,
|
||||
columnName
|
||||
);
|
||||
|
||||
if (!columnLabels) {
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "컬럼 라벨 정보를 찾을 수 없습니다.",
|
||||
error: {
|
||||
code: "COLUMN_LABELS_NOT_FOUND",
|
||||
details: `컬럼 ${tableName}.${columnName}의 라벨 정보가 존재하지 않습니다.`,
|
||||
},
|
||||
};
|
||||
res.status(404).json(response);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info(`컬럼 라벨 정보 조회 완료: ${tableName}.${columnName}`);
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "컬럼 라벨 정보를 성공적으로 조회했습니다.",
|
||||
data: columnLabels,
|
||||
if (!columnLabels) {
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "컬럼 라벨 정보를 찾을 수 없습니다.",
|
||||
error: {
|
||||
code: "COLUMN_LABELS_NOT_FOUND",
|
||||
details: `컬럼 ${tableName}.${columnName}의 라벨 정보가 존재하지 않습니다.`,
|
||||
},
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} finally {
|
||||
await client.end();
|
||||
res.status(404).json(response);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.info(`컬럼 라벨 정보 조회 완료: ${tableName}.${columnName}`);
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: "컬럼 라벨 정보를 성공적으로 조회했습니다.",
|
||||
data: columnLabels,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("컬럼 라벨 정보 조회 중 오류 발생:", error);
|
||||
|
||||
|
|
|
|||
|
|
@ -333,23 +333,36 @@ export class AdminService {
|
|||
try {
|
||||
logger.info(`AdminService.getMenuInfo 시작 - menuId: ${menuId}`);
|
||||
|
||||
// menu_info 모델이 @@ignore로 설정되어 있으므로 $queryRaw 사용
|
||||
const menuInfo = await prisma.$queryRaw<any[]>`
|
||||
SELECT
|
||||
MI.*,
|
||||
COALESCE(CM.COMPANY_NAME, '미지정') AS COMPANY_NAME
|
||||
FROM MENU_INFO MI
|
||||
LEFT JOIN COMPANY_MNG CM ON MI.COMPANY_CODE = CM.COMPANY_CODE
|
||||
WHERE MI.OBJID = ${parseInt(menuId)}::numeric
|
||||
LIMIT 1
|
||||
`;
|
||||
// Prisma ORM을 사용한 메뉴 정보 조회 (회사 정보 포함)
|
||||
const menuInfo = await prisma.menu_info.findUnique({
|
||||
where: {
|
||||
objid: Number(menuId),
|
||||
},
|
||||
include: {
|
||||
company: {
|
||||
select: {
|
||||
company_name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!menuInfo || menuInfo.length === 0) {
|
||||
if (!menuInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
logger.info("메뉴 정보 조회 결과:", menuInfo[0]);
|
||||
return menuInfo[0];
|
||||
// 응답 형식 조정 (기존 형식과 호환성 유지)
|
||||
const result = {
|
||||
...menuInfo,
|
||||
objid: menuInfo.objid.toString(), // BigInt를 문자열로 변환
|
||||
menu_type: menuInfo.menu_type?.toString(),
|
||||
parent_obj_id: menuInfo.parent_obj_id?.toString(),
|
||||
seq: menuInfo.seq?.toString(),
|
||||
company_name: menuInfo.company?.company_name || "미지정",
|
||||
};
|
||||
|
||||
logger.info("메뉴 정보 조회 결과:", result);
|
||||
return result;
|
||||
} catch (error) {
|
||||
logger.error("AdminService.getMenuInfo 오류:", error);
|
||||
throw error;
|
||||
|
|
|
|||
|
|
@ -155,23 +155,35 @@ export class AuthService {
|
|||
return null;
|
||||
}
|
||||
|
||||
// 권한 정보 조회 (기존 Java 로직과 동일)
|
||||
const authInfo = await prisma.$queryRaw<Array<{ auth_name: string }>>`
|
||||
SELECT ARRAY_TO_STRING(ARRAY_AGG(AM.AUTH_NAME), ',') AS AUTH_NAME
|
||||
FROM AUTHORITY_MASTER AM, AUTHORITY_SUB_USER ASU
|
||||
WHERE AM.OBJID = ASU.MASTER_OBJID
|
||||
AND ASU.USER_ID = ${userId}
|
||||
GROUP BY ASU.USER_ID
|
||||
`;
|
||||
// 권한 정보 조회 (Prisma ORM 사용)
|
||||
const authInfo = await prisma.authority_sub_user.findMany({
|
||||
where: {
|
||||
user_id: userId,
|
||||
},
|
||||
include: {
|
||||
authority_master: {
|
||||
select: {
|
||||
auth_name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// 회사 정보 조회 (기존 Java 로직과 동일)
|
||||
const companyInfo = await prisma.$queryRaw<
|
||||
Array<{ company_name: string }>
|
||||
>`
|
||||
SELECT COALESCE(CM.COMPANY_NAME, '미지정') AS COMPANY_NAME
|
||||
FROM COMPANY_MNG CM
|
||||
WHERE CM.COMPANY_CODE = ${userInfo.company_code || "ILSHIN"}
|
||||
`;
|
||||
// 권한명들을 쉼표로 연결
|
||||
const authNames = authInfo
|
||||
.filter((auth) => auth.authority_master?.auth_name)
|
||||
.map((auth) => auth.authority_master!.auth_name!)
|
||||
.join(",");
|
||||
|
||||
// 회사 정보 조회 (Prisma ORM 사용으로 변경)
|
||||
const companyInfo = await prisma.company_mng.findFirst({
|
||||
where: {
|
||||
company_code: userInfo.company_code || "ILSHIN",
|
||||
},
|
||||
select: {
|
||||
company_name: true,
|
||||
},
|
||||
});
|
||||
|
||||
// PersonBean 형태로 변환 (null 값을 undefined로 변환)
|
||||
const personBean: PersonBean = {
|
||||
|
|
@ -189,9 +201,11 @@ export class AuthService {
|
|||
userType: userInfo.user_type || undefined,
|
||||
userTypeName: userInfo.user_type_name || undefined,
|
||||
partnerObjid: userInfo.partner_objid || undefined,
|
||||
authName: authInfo.length > 0 ? authInfo[0].auth_name : undefined,
|
||||
authName: authNames || undefined,
|
||||
companyCode: userInfo.company_code || "ILSHIN",
|
||||
photo: userInfo.photo ? `data:image/jpeg;base64,${userInfo.photo.toString('base64')}` : undefined,
|
||||
photo: userInfo.photo
|
||||
? `data:image/jpeg;base64,${userInfo.photo.toString("base64")}`
|
||||
: undefined,
|
||||
locale: userInfo.locale || "KR",
|
||||
};
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,4 @@
|
|||
import { Client } from "pg";
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { logger } from "../utils/logger";
|
||||
import {
|
||||
TableInfo,
|
||||
|
|
@ -8,21 +8,21 @@ import {
|
|||
ColumnLabels,
|
||||
} from "../types/tableManagement";
|
||||
|
||||
export class TableManagementService {
|
||||
private client: Client;
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
constructor(client: Client) {
|
||||
this.client = client;
|
||||
}
|
||||
export class TableManagementService {
|
||||
constructor() {}
|
||||
|
||||
/**
|
||||
* 테이블 목록 조회 (PostgreSQL information_schema 활용)
|
||||
* 메타데이터 조회는 Prisma로 변경 불가
|
||||
*/
|
||||
async getTableList(): Promise<TableInfo[]> {
|
||||
try {
|
||||
logger.info("테이블 목록 조회 시작");
|
||||
|
||||
const query = `
|
||||
// information_schema는 여전히 $queryRaw 사용
|
||||
const tables = await prisma.$queryRaw<TableInfo[]>`
|
||||
SELECT
|
||||
t.table_name as "tableName",
|
||||
COALESCE(tl.table_label, t.table_name) as "displayName",
|
||||
|
|
@ -38,10 +38,8 @@ export class TableManagementService {
|
|||
ORDER BY t.table_name
|
||||
`;
|
||||
|
||||
const result = await this.client.query(query);
|
||||
logger.info(`테이블 목록 조회 완료: ${result.rows.length}개`);
|
||||
|
||||
return result.rows;
|
||||
logger.info(`테이블 목록 조회 완료: ${tables.length}개`);
|
||||
return tables;
|
||||
} catch (error) {
|
||||
logger.error("테이블 목록 조회 중 오류 발생:", error);
|
||||
throw new Error(
|
||||
|
|
@ -52,12 +50,14 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 테이블 컬럼 정보 조회
|
||||
* 메타데이터 조회는 Prisma로 변경 불가
|
||||
*/
|
||||
async getColumnList(tableName: string): Promise<ColumnTypeInfo[]> {
|
||||
try {
|
||||
logger.info(`컬럼 정보 조회 시작: ${tableName}`);
|
||||
|
||||
const query = `
|
||||
// information_schema는 여전히 $queryRaw 사용
|
||||
const columns = await prisma.$queryRaw<ColumnTypeInfo[]>`
|
||||
SELECT
|
||||
c.column_name as "columnName",
|
||||
COALESCE(cl.column_label, c.column_name) as "displayName",
|
||||
|
|
@ -78,14 +78,12 @@ export class TableManagementService {
|
|||
cl.is_visible as "isVisible"
|
||||
FROM information_schema.columns c
|
||||
LEFT JOIN column_labels cl ON c.table_name = cl.table_name AND c.column_name = cl.column_name
|
||||
WHERE c.table_name = $1
|
||||
WHERE c.table_name = ${tableName}
|
||||
ORDER BY c.ordinal_position
|
||||
`;
|
||||
|
||||
const result = await this.client.query(query, [tableName]);
|
||||
logger.info(`컬럼 정보 조회 완료: ${tableName}, ${result.rows.length}개`);
|
||||
|
||||
return result.rows;
|
||||
logger.info(`컬럼 정보 조회 완료: ${tableName}, ${columns.length}개`);
|
||||
return columns;
|
||||
} catch (error) {
|
||||
logger.error(`컬럼 정보 조회 중 오류 발생: ${tableName}`, error);
|
||||
throw new Error(
|
||||
|
|
@ -96,18 +94,22 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 테이블이 table_labels에 없으면 자동 추가
|
||||
* Prisma ORM으로 변경
|
||||
*/
|
||||
async insertTableIfNotExists(tableName: string): Promise<void> {
|
||||
try {
|
||||
logger.info(`테이블 라벨 자동 추가 시작: ${tableName}`);
|
||||
|
||||
const query = `
|
||||
INSERT INTO table_labels (table_name, table_label, description)
|
||||
VALUES ($1, $1, '')
|
||||
ON CONFLICT (table_name) DO NOTHING
|
||||
`;
|
||||
await prisma.table_labels.upsert({
|
||||
where: { table_name: tableName },
|
||||
update: {}, // 이미 존재하면 변경하지 않음
|
||||
create: {
|
||||
table_name: tableName,
|
||||
table_label: tableName,
|
||||
description: "",
|
||||
},
|
||||
});
|
||||
|
||||
await this.client.query(query, [tableName]);
|
||||
logger.info(`테이블 라벨 자동 추가 완료: ${tableName}`);
|
||||
} catch (error) {
|
||||
logger.error(`테이블 라벨 자동 추가 중 오류 발생: ${tableName}`, error);
|
||||
|
|
@ -119,6 +121,7 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 컬럼 설정 업데이트 (UPSERT 방식)
|
||||
* Prisma ORM으로 변경
|
||||
*/
|
||||
async updateColumnSettings(
|
||||
tableName: string,
|
||||
|
|
@ -131,38 +134,42 @@ export class TableManagementService {
|
|||
// 테이블이 table_labels에 없으면 자동 추가
|
||||
await this.insertTableIfNotExists(tableName);
|
||||
|
||||
const query = `
|
||||
INSERT INTO column_labels (
|
||||
table_name, column_name, column_label, web_type,
|
||||
detail_settings, code_category, code_value,
|
||||
reference_table, reference_column, display_order, is_visible
|
||||
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
|
||||
ON CONFLICT (table_name, column_name) DO UPDATE SET
|
||||
column_label = EXCLUDED.column_label,
|
||||
web_type = EXCLUDED.web_type,
|
||||
detail_settings = EXCLUDED.detail_settings,
|
||||
code_category = EXCLUDED.code_category,
|
||||
code_value = EXCLUDED.code_value,
|
||||
reference_table = EXCLUDED.reference_table,
|
||||
reference_column = EXCLUDED.reference_column,
|
||||
display_order = EXCLUDED.display_order,
|
||||
is_visible = EXCLUDED.is_visible,
|
||||
updated_date = now()
|
||||
`;
|
||||
|
||||
await this.client.query(query, [
|
||||
tableName,
|
||||
columnName,
|
||||
settings.columnLabel,
|
||||
settings.webType,
|
||||
settings.detailSettings,
|
||||
settings.codeCategory,
|
||||
settings.codeValue,
|
||||
settings.referenceTable,
|
||||
settings.referenceColumn,
|
||||
settings.displayOrder || 0,
|
||||
settings.isVisible !== undefined ? settings.isVisible : true,
|
||||
]);
|
||||
// column_labels 업데이트 또는 생성
|
||||
await prisma.column_labels.upsert({
|
||||
where: {
|
||||
table_name_column_name: {
|
||||
table_name: tableName,
|
||||
column_name: columnName,
|
||||
},
|
||||
},
|
||||
update: {
|
||||
column_label: settings.columnLabel,
|
||||
web_type: settings.webType,
|
||||
detail_settings: settings.detailSettings,
|
||||
code_category: settings.codeCategory,
|
||||
code_value: settings.codeValue,
|
||||
reference_table: settings.referenceTable,
|
||||
reference_column: settings.referenceColumn,
|
||||
display_order: settings.displayOrder || 0,
|
||||
is_visible:
|
||||
settings.isVisible !== undefined ? settings.isVisible : true,
|
||||
updated_date: new Date(),
|
||||
},
|
||||
create: {
|
||||
table_name: tableName,
|
||||
column_name: columnName,
|
||||
column_label: settings.columnLabel,
|
||||
web_type: settings.webType,
|
||||
detail_settings: settings.detailSettings,
|
||||
code_category: settings.codeCategory,
|
||||
code_value: settings.codeValue,
|
||||
reference_table: settings.referenceTable,
|
||||
reference_column: settings.referenceColumn,
|
||||
display_order: settings.displayOrder || 0,
|
||||
is_visible:
|
||||
settings.isVisible !== undefined ? settings.isVisible : true,
|
||||
},
|
||||
});
|
||||
|
||||
logger.info(`컬럼 설정 업데이트 완료: ${tableName}.${columnName}`);
|
||||
} catch (error) {
|
||||
|
|
@ -178,6 +185,7 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 전체 컬럼 설정 일괄 업데이트
|
||||
* Prisma 트랜잭션으로 변경
|
||||
*/
|
||||
async updateAllColumnSettings(
|
||||
tableName: string,
|
||||
|
|
@ -188,10 +196,8 @@ export class TableManagementService {
|
|||
`전체 컬럼 설정 일괄 업데이트 시작: ${tableName}, ${columnSettings.length}개`
|
||||
);
|
||||
|
||||
// 트랜잭션 시작
|
||||
await this.client.query("BEGIN");
|
||||
|
||||
try {
|
||||
// Prisma 트랜잭션 사용
|
||||
await prisma.$transaction(async (tx) => {
|
||||
// 테이블이 table_labels에 없으면 자동 추가
|
||||
await this.insertTableIfNotExists(tableName);
|
||||
|
||||
|
|
@ -211,15 +217,9 @@ export class TableManagementService {
|
|||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 트랜잭션 커밋
|
||||
await this.client.query("COMMIT");
|
||||
logger.info(`전체 컬럼 설정 일괄 업데이트 완료: ${tableName}`);
|
||||
} catch (error) {
|
||||
// 트랜잭션 롤백
|
||||
await this.client.query("ROLLBACK");
|
||||
throw error;
|
||||
}
|
||||
logger.info(`전체 컬럼 설정 일괄 업데이트 완료: ${tableName}`);
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`전체 컬럼 설정 일괄 업데이트 중 오류 발생: ${tableName}`,
|
||||
|
|
@ -233,30 +233,37 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 테이블 라벨 정보 조회
|
||||
* Prisma ORM으로 변경
|
||||
*/
|
||||
async getTableLabels(tableName: string): Promise<TableLabels | null> {
|
||||
try {
|
||||
logger.info(`테이블 라벨 정보 조회 시작: ${tableName}`);
|
||||
|
||||
const query = `
|
||||
SELECT
|
||||
table_name as "tableName",
|
||||
table_label as "tableLabel",
|
||||
description,
|
||||
created_date as "createdDate",
|
||||
updated_date as "updatedDate"
|
||||
FROM table_labels
|
||||
WHERE table_name = $1
|
||||
`;
|
||||
const tableLabel = await prisma.table_labels.findUnique({
|
||||
where: { table_name: tableName },
|
||||
select: {
|
||||
table_name: true,
|
||||
table_label: true,
|
||||
description: true,
|
||||
created_date: true,
|
||||
updated_date: true,
|
||||
},
|
||||
});
|
||||
|
||||
const result = await this.client.query(query, [tableName]);
|
||||
|
||||
if (result.rows.length === 0) {
|
||||
if (!tableLabel) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const result: TableLabels = {
|
||||
tableName: tableLabel.table_name,
|
||||
tableLabel: tableLabel.table_label || undefined,
|
||||
description: tableLabel.description || undefined,
|
||||
createdDate: tableLabel.created_date || undefined,
|
||||
updatedDate: tableLabel.updated_date || undefined,
|
||||
};
|
||||
|
||||
logger.info(`테이블 라벨 정보 조회 완료: ${tableName}`);
|
||||
return result.rows[0];
|
||||
return result;
|
||||
} catch (error) {
|
||||
logger.error(`테이블 라벨 정보 조회 중 오류 발생: ${tableName}`, error);
|
||||
throw new Error(
|
||||
|
|
@ -267,6 +274,7 @@ export class TableManagementService {
|
|||
|
||||
/**
|
||||
* 컬럼 라벨 정보 조회
|
||||
* Prisma ORM으로 변경
|
||||
*/
|
||||
async getColumnLabels(
|
||||
tableName: string,
|
||||
|
|
@ -275,35 +283,56 @@ export class TableManagementService {
|
|||
try {
|
||||
logger.info(`컬럼 라벨 정보 조회 시작: ${tableName}.${columnName}`);
|
||||
|
||||
const query = `
|
||||
SELECT
|
||||
id,
|
||||
table_name as "tableName",
|
||||
column_name as "columnName",
|
||||
column_label as "columnLabel",
|
||||
web_type as "webType",
|
||||
detail_settings as "detailSettings",
|
||||
description,
|
||||
display_order as "displayOrder",
|
||||
is_visible as "isVisible",
|
||||
code_category as "codeCategory",
|
||||
code_value as "codeValue",
|
||||
reference_table as "referenceTable",
|
||||
reference_column as "referenceColumn",
|
||||
created_date as "createdDate",
|
||||
updated_date as "updatedDate"
|
||||
FROM column_labels
|
||||
WHERE table_name = $1 AND column_name = $2
|
||||
`;
|
||||
const columnLabel = await prisma.column_labels.findUnique({
|
||||
where: {
|
||||
table_name_column_name: {
|
||||
table_name: tableName,
|
||||
column_name: columnName,
|
||||
},
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
table_name: true,
|
||||
column_name: true,
|
||||
column_label: true,
|
||||
web_type: true,
|
||||
detail_settings: true,
|
||||
description: true,
|
||||
display_order: true,
|
||||
is_visible: true,
|
||||
code_category: true,
|
||||
code_value: true,
|
||||
reference_table: true,
|
||||
reference_column: true,
|
||||
created_date: true,
|
||||
updated_date: true,
|
||||
},
|
||||
});
|
||||
|
||||
const result = await this.client.query(query, [tableName, columnName]);
|
||||
|
||||
if (result.rows.length === 0) {
|
||||
if (!columnLabel) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const result: ColumnLabels = {
|
||||
id: columnLabel.id,
|
||||
tableName: columnLabel.table_name || "",
|
||||
columnName: columnLabel.column_name || "",
|
||||
columnLabel: columnLabel.column_label || undefined,
|
||||
webType: columnLabel.web_type || undefined,
|
||||
detailSettings: columnLabel.detail_settings || undefined,
|
||||
description: columnLabel.description || undefined,
|
||||
displayOrder: columnLabel.display_order || undefined,
|
||||
isVisible: columnLabel.is_visible || undefined,
|
||||
codeCategory: columnLabel.code_category || undefined,
|
||||
codeValue: columnLabel.code_value || undefined,
|
||||
referenceTable: columnLabel.reference_table || undefined,
|
||||
referenceColumn: columnLabel.reference_column || undefined,
|
||||
createdDate: columnLabel.created_date || undefined,
|
||||
updatedDate: columnLabel.updated_date || undefined,
|
||||
};
|
||||
|
||||
logger.info(`컬럼 라벨 정보 조회 완료: ${tableName}.${columnName}`);
|
||||
return result.rows[0];
|
||||
return result;
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`컬럼 라벨 정보 조회 중 오류 발생: ${tableName}.${columnName}`,
|
||||
|
|
|
|||
Loading…
Reference in New Issue