ERP-node/backend-node/src/controllers/mapDataController.ts

138 lines
3.6 KiB
TypeScript

import { Request, Response } from "express";
import { MapDataService } from "../services/mapDataService";
import { logger } from "../utils/logger";
/**
* 지도 데이터 조회 컨트롤러
* 외부 DB 연결에서 위도/경도 데이터를 가져와 지도에 표시할 수 있도록 변환
*/
export class MapDataController {
private mapDataService: MapDataService;
constructor() {
this.mapDataService = new MapDataService();
}
/**
* 외부 DB에서 지도 데이터 조회
*/
getMapData = async (req: Request, res: Response): Promise<void> => {
try {
const { connectionId } = req.params;
const {
tableName,
latColumn,
lngColumn,
labelColumn,
statusColumn,
additionalColumns,
whereClause,
} = req.query;
logger.info("🗺️ 지도 데이터 조회 요청:", {
connectionId,
tableName,
latColumn,
lngColumn,
});
// 필수 파라미터 검증
if (!tableName || !latColumn || !lngColumn) {
res.status(400).json({
success: false,
message: "tableName, latColumn, lngColumn은 필수입니다.",
});
return;
}
const markers = await this.mapDataService.getMapData({
connectionId: parseInt(connectionId as string),
tableName: tableName as string,
latColumn: latColumn as string,
lngColumn: lngColumn as string,
labelColumn: labelColumn as string,
statusColumn: statusColumn as string,
additionalColumns: additionalColumns
? (additionalColumns as string).split(",")
: [],
whereClause: whereClause as string,
});
res.json({
success: true,
data: {
markers,
count: markers.length,
},
});
} catch (error: any) {
logger.error("❌ 지도 데이터 조회 오류:", error);
res.status(500).json({
success: false,
message: "지도 데이터 조회 중 오류가 발생했습니다.",
error: error.message,
});
}
};
/**
* 내부 DB에서 지도 데이터 조회
*/
getInternalMapData = async (req: Request, res: Response): Promise<void> => {
try {
const {
tableName,
latColumn,
lngColumn,
labelColumn,
statusColumn,
additionalColumns,
whereClause,
} = req.query;
logger.info("🗺️ 내부 DB 지도 데이터 조회 요청:", {
tableName,
latColumn,
lngColumn,
});
// 필수 파라미터 검증
if (!tableName || !latColumn || !lngColumn) {
res.status(400).json({
success: false,
message: "tableName, latColumn, lngColumn은 필수입니다.",
});
return;
}
const markers = await this.mapDataService.getInternalMapData({
tableName: tableName as string,
latColumn: latColumn as string,
lngColumn: lngColumn as string,
labelColumn: labelColumn as string,
statusColumn: statusColumn as string,
additionalColumns: additionalColumns
? (additionalColumns as string).split(",")
: [],
whereClause: whereClause as string,
});
res.json({
success: true,
data: {
markers,
count: markers.length,
},
});
} catch (error: any) {
logger.error("❌ 내부 DB 지도 데이터 조회 오류:", error);
res.status(500).json({
success: false,
message: "지도 데이터 조회 중 오류가 발생했습니다.",
error: error.message,
});
}
};
}