디스코드 웹 훅 테스트 구현
This commit is contained in:
192
backend-node/src/routes/externalCallRoutes.ts
Normal file
192
backend-node/src/routes/externalCallRoutes.ts
Normal file
@@ -0,0 +1,192 @@
|
||||
import { Router, Request, Response } from "express";
|
||||
import { ExternalCallService } from "../services/externalCallService";
|
||||
import {
|
||||
ExternalCallRequest,
|
||||
SupportedExternalCallSettings,
|
||||
} from "../types/externalCallTypes";
|
||||
|
||||
const router = Router();
|
||||
const externalCallService = new ExternalCallService();
|
||||
|
||||
/**
|
||||
* 외부 호출 테스트
|
||||
* POST /api/external-calls/test
|
||||
*/
|
||||
router.post("/test", async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { settings, templateData } = req.body;
|
||||
|
||||
if (!settings) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: "외부 호출 설정이 필요합니다.",
|
||||
});
|
||||
}
|
||||
|
||||
// 설정 검증
|
||||
const validation = externalCallService.validateSettings(
|
||||
settings as SupportedExternalCallSettings
|
||||
);
|
||||
if (!validation.valid) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: "설정 검증 실패",
|
||||
details: validation.errors,
|
||||
});
|
||||
}
|
||||
|
||||
// 테스트 요청 생성
|
||||
const testRequest: ExternalCallRequest = {
|
||||
diagramId: 0, // 테스트용
|
||||
relationshipId: "test",
|
||||
settings: settings as SupportedExternalCallSettings,
|
||||
templateData: templateData || {
|
||||
recordCount: 5,
|
||||
tableName: "test_table",
|
||||
timestamp: new Date().toISOString(),
|
||||
},
|
||||
};
|
||||
|
||||
// 외부 호출 실행
|
||||
const result = await externalCallService.executeExternalCall(testRequest);
|
||||
|
||||
return res.json({
|
||||
success: true,
|
||||
result,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("외부 호출 테스트 실패:", error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
error:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: "알 수 없는 오류가 발생했습니다.",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 외부 호출 실행
|
||||
* POST /api/external-calls/execute
|
||||
*/
|
||||
router.post("/execute", async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { diagramId, relationshipId, settings, templateData } = req.body;
|
||||
|
||||
if (!diagramId || !relationshipId || !settings) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error:
|
||||
"필수 파라미터가 누락되었습니다. (diagramId, relationshipId, settings)",
|
||||
});
|
||||
}
|
||||
|
||||
// 설정 검증
|
||||
const validation = externalCallService.validateSettings(
|
||||
settings as SupportedExternalCallSettings
|
||||
);
|
||||
if (!validation.valid) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: "설정 검증 실패",
|
||||
details: validation.errors,
|
||||
});
|
||||
}
|
||||
|
||||
// 외부 호출 요청 생성
|
||||
const callRequest: ExternalCallRequest = {
|
||||
diagramId: parseInt(diagramId),
|
||||
relationshipId,
|
||||
settings: settings as SupportedExternalCallSettings,
|
||||
templateData,
|
||||
};
|
||||
|
||||
// 외부 호출 실행
|
||||
const result = await externalCallService.executeExternalCall(callRequest);
|
||||
|
||||
// TODO: 호출 결과를 데이터베이스에 로그로 저장 (향후 구현)
|
||||
|
||||
return res.json({
|
||||
success: true,
|
||||
result,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("외부 호출 실행 실패:", error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
error:
|
||||
error instanceof Error
|
||||
? error.message
|
||||
: "알 수 없는 오류가 발생했습니다.",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 지원되는 외부 호출 타입 목록 조회
|
||||
* GET /api/external-calls/types
|
||||
*/
|
||||
router.get("/types", (req: Request, res: Response) => {
|
||||
res.json({
|
||||
success: true,
|
||||
supportedTypes: {
|
||||
"rest-api": {
|
||||
name: "REST API 호출",
|
||||
subtypes: {
|
||||
slack: "슬랙 웹훅",
|
||||
"kakao-talk": "카카오톡 알림",
|
||||
discord: "디스코드 웹훅",
|
||||
generic: "일반 REST API",
|
||||
},
|
||||
},
|
||||
email: {
|
||||
name: "이메일 전송",
|
||||
status: "구현 예정",
|
||||
},
|
||||
ftp: {
|
||||
name: "FTP 업로드",
|
||||
status: "구현 예정",
|
||||
},
|
||||
queue: {
|
||||
name: "메시지 큐",
|
||||
status: "구현 예정",
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 외부 호출 설정 검증
|
||||
* POST /api/external-calls/validate
|
||||
*/
|
||||
router.post("/validate", (req: Request, res: Response) => {
|
||||
try {
|
||||
const { settings } = req.body;
|
||||
|
||||
if (!settings) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: "검증할 설정이 필요합니다.",
|
||||
});
|
||||
}
|
||||
|
||||
const validation = externalCallService.validateSettings(
|
||||
settings as SupportedExternalCallSettings
|
||||
);
|
||||
|
||||
return res.json({
|
||||
success: true,
|
||||
validation,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("설정 검증 실패:", error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
error:
|
||||
error instanceof Error ? error.message : "검증 중 오류가 발생했습니다.",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user