259 lines
7.6 KiB
TypeScript
259 lines
7.6 KiB
TypeScript
// 수집 관리 컨트롤러
|
|
// 작성일: 2024-12-23
|
|
|
|
import { Request, Response } from 'express';
|
|
import { CollectionService } from '../services/collectionService';
|
|
import { DataCollectionConfig, CollectionFilter } from '../types/collectionManagement';
|
|
import { AuthenticatedRequest } from '../middleware/authMiddleware';
|
|
|
|
export class CollectionController {
|
|
/**
|
|
* 수집 설정 목록 조회
|
|
*/
|
|
static async getCollectionConfigs(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const filter: CollectionFilter = {
|
|
config_name: req.query.config_name as string,
|
|
source_connection_id: req.query.source_connection_id ? parseInt(req.query.source_connection_id as string) : undefined,
|
|
collection_type: req.query.collection_type as string,
|
|
is_active: req.query.is_active as string,
|
|
company_code: req.user?.companyCode || '*',
|
|
search: req.query.search as string,
|
|
};
|
|
|
|
const configs = await CollectionService.getCollectionConfigs(filter);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: configs,
|
|
message: '수집 설정 목록을 조회했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 설정 목록 조회 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 설정 목록 조회에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 설정 상세 조회
|
|
*/
|
|
static async getCollectionConfigById(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const id = parseInt(req.params.id);
|
|
if (isNaN(id)) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '유효하지 않은 ID입니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const config = await CollectionService.getCollectionConfigById(id);
|
|
if (!config) {
|
|
res.status(404).json({
|
|
success: false,
|
|
message: '수집 설정을 찾을 수 없습니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: config,
|
|
message: '수집 설정을 조회했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 설정 조회 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 설정 조회에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 설정 생성
|
|
*/
|
|
static async createCollectionConfig(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const data: DataCollectionConfig = {
|
|
...req.body,
|
|
company_code: req.user?.companyCode || '*',
|
|
created_by: req.user?.userId,
|
|
};
|
|
|
|
// 필수 필드 검증
|
|
if (!data.config_name || !data.source_connection_id || !data.source_table || !data.collection_type) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '필수 필드가 누락되었습니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const config = await CollectionService.createCollectionConfig(data);
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
data: config,
|
|
message: '수집 설정을 생성했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 설정 생성 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 설정 생성에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 설정 수정
|
|
*/
|
|
static async updateCollectionConfig(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const id = parseInt(req.params.id);
|
|
if (isNaN(id)) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '유효하지 않은 ID입니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const data: Partial<DataCollectionConfig> = {
|
|
...req.body,
|
|
updated_by: req.user?.userId,
|
|
};
|
|
|
|
const config = await CollectionService.updateCollectionConfig(id, data);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: config,
|
|
message: '수집 설정을 수정했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 설정 수정 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 설정 수정에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 설정 삭제
|
|
*/
|
|
static async deleteCollectionConfig(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const id = parseInt(req.params.id);
|
|
if (isNaN(id)) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '유효하지 않은 ID입니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
await CollectionService.deleteCollectionConfig(id);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
message: '수집 설정을 삭제했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 설정 삭제 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 설정 삭제에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 작업 실행
|
|
*/
|
|
static async executeCollection(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const id = parseInt(req.params.id);
|
|
if (isNaN(id)) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '유효하지 않은 ID입니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const job = await CollectionService.executeCollection(id);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: job,
|
|
message: '수집 작업을 시작했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 작업 실행 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 작업 실행에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 작업 목록 조회
|
|
*/
|
|
static async getCollectionJobs(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const configId = req.query.config_id ? parseInt(req.query.config_id as string) : undefined;
|
|
const jobs = await CollectionService.getCollectionJobs(configId);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: jobs,
|
|
message: '수집 작업 목록을 조회했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 작업 목록 조회 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 작업 목록 조회에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 수집 이력 조회
|
|
*/
|
|
static async getCollectionHistory(req: AuthenticatedRequest, res: Response): Promise<void> {
|
|
try {
|
|
const configId = parseInt(req.params.configId);
|
|
if (isNaN(configId)) {
|
|
res.status(400).json({
|
|
success: false,
|
|
message: '유효하지 않은 설정 ID입니다.',
|
|
});
|
|
return;
|
|
}
|
|
|
|
const history = await CollectionService.getCollectionHistory(configId);
|
|
|
|
res.status(200).json({
|
|
success: true,
|
|
data: history,
|
|
message: '수집 이력을 조회했습니다.',
|
|
});
|
|
} catch (error) {
|
|
console.error('수집 이력 조회 오류:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: error instanceof Error ? error.message : '수집 이력 조회에 실패했습니다.',
|
|
});
|
|
}
|
|
}
|
|
}
|