백엔드 구현

This commit is contained in:
hyeonsu
2025-09-12 10:05:25 +09:00
parent 441a5712c1
commit f50dd520ae
5 changed files with 806 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
import prisma from "../config/database";
import { Prisma } from "@prisma/client";
import { EventTriggerService } from "./eventTriggerService";
export interface FormDataResult {
id: number;
@@ -247,6 +248,22 @@ export class DynamicFormService {
// 결과를 표준 형식으로 변환
const insertedRecord = Array.isArray(result) ? result[0] : result;
// 🔥 조건부 연결 실행 (INSERT 트리거)
try {
if (company_code) {
await EventTriggerService.executeEventTriggers(
"insert",
tableName,
insertedRecord as Record<string, any>,
company_code
);
console.log("🚀 조건부 연결 트리거 실행 완료 (INSERT)");
}
} catch (triggerError) {
console.error("⚠️ 조건부 연결 트리거 실행 오류:", triggerError);
// 트리거 오류는 로그만 남기고 메인 저장 프로세스는 계속 진행
}
return {
id: insertedRecord.id || insertedRecord.objid || 0,
screenId: screenId,
@@ -343,6 +360,22 @@ export class DynamicFormService {
const updatedRecord = Array.isArray(result) ? result[0] : result;
// 🔥 조건부 연결 실행 (UPDATE 트리거)
try {
if (company_code) {
await EventTriggerService.executeEventTriggers(
"update",
tableName,
updatedRecord as Record<string, any>,
company_code
);
console.log("🚀 조건부 연결 트리거 실행 완료 (UPDATE)");
}
} catch (triggerError) {
console.error("⚠️ 조건부 연결 트리거 실행 오류:", triggerError);
// 트리거 오류는 로그만 남기고 메인 업데이트 프로세스는 계속 진행
}
return {
id: updatedRecord.id || updatedRecord.objid || id,
screenId: 0, // 실제 테이블에는 screenId가 없으므로 0으로 설정
@@ -362,7 +395,11 @@ export class DynamicFormService {
/**
* 폼 데이터 삭제 (실제 테이블에서 직접 삭제)
*/
async deleteFormData(id: number, tableName: string): Promise<void> {
async deleteFormData(
id: number,
tableName: string,
companyCode?: string
): Promise<void> {
try {
console.log("🗑️ 서비스: 실제 테이블에서 폼 데이터 삭제 시작:", {
id,
@@ -382,6 +419,28 @@ export class DynamicFormService {
const result = await prisma.$queryRawUnsafe(deleteQuery, id);
console.log("✅ 서비스: 실제 테이블 삭제 성공:", result);
// 🔥 조건부 연결 실행 (DELETE 트리거)
try {
if (
companyCode &&
result &&
Array.isArray(result) &&
result.length > 0
) {
const deletedRecord = result[0] as Record<string, any>;
await EventTriggerService.executeEventTriggers(
"delete",
tableName,
deletedRecord,
companyCode
);
console.log("🚀 조건부 연결 트리거 실행 완료 (DELETE)");
}
} catch (triggerError) {
console.error("⚠️ 조건부 연결 트리거 실행 오류:", triggerError);
// 트리거 오류는 로그만 남기고 메인 삭제 프로세스는 계속 진행
}
} catch (error) {
console.error("❌ 서비스: 실제 테이블 삭제 실패:", error);
throw new Error(`실제 테이블 삭제 실패: ${error}`);