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 => { 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 => { 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, }); } }; }