diff --git a/apps/sn/.env.local b/apps/sn/.env.local index 26a9a0490..3354fcc4c 100644 --- a/apps/sn/.env.local +++ b/apps/sn/.env.local @@ -2,9 +2,10 @@ NEXT_PUBLIC_SITE_ID = SN NEXT_PUBLIC_PORT = 3002 NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 #NEXT_PUBLIC_PROXY_HOST = http://sn.hasu.or.kr:3002 -NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 -NEXT_PUBLIC_GEOSERVER_URL = http://rsone.iptime.org:10010/geoserver +NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 +NEXT_PUBLIC_GEOSERVER_URL = http://rsone.iptime.org:10010/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver #TODO 운영에서 바꿔야 함 +NEXT_PUBLIC_RSONE_DC_URL = https://apigateway.rsonesoft.com/dc-service #자료관 데이터 NEXT_PUBLIC_CLAIM_NAME = Authorization NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token diff --git a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/aplcnYms.ts b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/aplcnYms.ts index 7f4acf616..1cd0d6ded 100644 --- a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/aplcnYms.ts +++ b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/aplcnYms.ts @@ -1,5 +1,5 @@ import {useState, useEffect} from 'react'; -import { getData } from '@/components/lib/api'; +import { getData, getDcData } from '@/components/lib/api'; import moment from "moment"; export type TInftwtAnls = { @@ -64,6 +64,13 @@ export type TOilqData = { mtrngDt: string; // 계측일시 oilq: number; // 유량 } + +export const getDcTree = async () => { + const queryString = ''; + const result = await getDcData(`/api/v1/dc/tree${queryString ? `?${queryString}` : ''}`); + return result; +}; + const getOptionsAplcnYm = (yyyymms: string[]): { text: string; val: string }[] => { let yyyymms1 = yyyymms.map(dateStr => { const year = dateStr.slice(0, 4); @@ -88,6 +95,7 @@ const selectAplcnYms = async(gubun:string) => { // 상수사용월 console.error(error); } }; + export const useAplcnYms = (gubun:string) => { const [data, setData] = useState<{ text: string; val: string }[]>([]); @@ -124,7 +132,7 @@ export const selectInftwtAnls = async(aplcnYm:String) => { // 침입수분석 }; export const getChartDataInftwtAnlsRslt = (arr: TInftwtAnlsRslt[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ - label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("DD HH:mm"), + label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("HH시"), val: anlsRslt.predcOilq, })); return options; @@ -223,14 +231,14 @@ export const selectRdiiAnls = async(aplcnYm:String) => { // 침입수분석 }; export const getChartDataRdiiAnlsRslt = (arr: TRdiiAnlsRslt[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ - label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("DD HH:mm"), + label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("MM-DD HH시"), val: anlsRslt.predcOilq, })); return options; }; export const getChartDataRdiiAnlsRsltMinq = (arr: TRdiiAnlsRslt[]): { label: string; val: number }[] => { const options = arr.map(anlsRslt => ({ - label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("DD HH:mm"), + label: moment(anlsRslt.anlsTm, "YYYYMMDDHHmmss").format("MM-DD HH시"), val: anlsRslt.minq, })); return options; diff --git a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx index 090e02f64..8ad2a4362 100644 --- a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx +++ b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/infilChart.tsx @@ -30,8 +30,8 @@ const InfilChart = ({ btnTxt, isModalOpen, setIsModalOpen, closeModal, pplMngNo }); const [inftwtQty, setInftwtQty] = useState(0); // 침입수량 const aplcnYms = fn.useAplcnYms('inftwtAnlsRslt'); // 상수사용월 데이터 가져오기 - pplMngNo = "L"+pplMngNo; // "L13101003"; - console.log("pplMngNo", pplMngNo); + const dcData = fn.getDcTree(); // 자료관 데이터 가져오기 + pplMngNo = "L"+pplMngNo; // inp파일에 하수관로와 맨홀의 번호가 같으면 분석 오류가 발행하여 const openPopup = () => { if (buttonRef.current) { const rect = buttonRef.current.getBoundingClientRect(); // 버튼 위치 계산 @@ -51,7 +51,7 @@ const InfilChart = ({ btnTxt, isModalOpen, setIsModalOpen, closeModal, pplMngNo useEffect(() => { if (isModalOpen === false) { - setPopupOpen(false); // 모달이 닫힐 때 조회조건팝업은 열어두기 + setPopupOpen(true); // 모달이 닫힐 때 조회조건팝업은 열어두기 setAplcnYm(""); // 상수사용월 초기화 setInftwtAnlss([]); // 침입수분석 초기화 setInftwtAnlsInfos([{ val: 0, text: '선택' }]); // 침입수분석정보 초기화 diff --git a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx index 930f83a6d..ddaffcaf3 100644 --- a/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx +++ b/apps/sn/app/(map-layout)/map/components/popupComponent/chart/rdiiChart.tsx @@ -52,7 +52,7 @@ const RdiiChart = ({ btnTxt, isModalOpen, setIsModalOpen, closeModal, pplMngNo } useEffect(() => { if (isModalOpen === false) { - setPopupOpen(false); // 모달이 닫힐 때 팝업은 + setPopupOpen(true); // 모달이 닫힐 때 팝업은 setAplcnYm(""); // 상수사용월 초기화 setRdiiAnlss([]); // 강우유입수분석 초기화 setRdiiAnlsInfos([{ val: 0, text: '선택' }]); // 강우유입수분석정보 초기화 diff --git a/apps/sn/app/components/lib/api/index.ts b/apps/sn/app/components/lib/api/index.ts index beb527c65..1d711b18a 100644 --- a/apps/sn/app/components/lib/api/index.ts +++ b/apps/sn/app/components/lib/api/index.ts @@ -1,4 +1,5 @@ const BASE_URL = process.env.NEXT_PUBLIC_SEWERAGE_API_URL || ''; +const DC_URL = process.env.NEXT_PUBLIC_RSONE_DC_URL || ''; export const postData = async (url: string, data: object): Promise => { const options: RequestInit = { @@ -54,6 +55,19 @@ export const getData = async (url: string, data?: object): Promise => { throw new Error('Failed to fetch data'); }; +export const getDcData = async (url: string, data?: object): Promise => { + console.log(url); + console.log(`${DC_URL}${url}`); + const res = await fetch(`${DC_URL}${url}`, { + method: "GET", + }); + if (res.ok) { + const data = await res.json(); + return data; + } + throw new Error('Failed to fetch data'); +}; + export const deleteData = async (url: string, data?: object): Promise => { const options: RequestInit = { method: "DELETE", diff --git a/apps/sn/middleware.ts b/apps/sn/middleware.ts index 3ad5d5129..546516261 100644 --- a/apps/sn/middleware.ts +++ b/apps/sn/middleware.ts @@ -1,4 +1,5 @@ import { NextRequest, NextResponse } from "next/server"; +import path from "path"; const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; @@ -6,6 +7,7 @@ const SERVER_API_URL = process.env.NEXT_PUBLIC_SERVER_API_URL || ""; const SEWERAGE_API_URL = process.env.NEXT_PUBLIC_SEWERAGE_API_URL || ""; const GEOSERVER_URL = process.env.NEXT_PUBLIC_GEOSERVER_URL || ""; const LX_GEOSERVER_URL = process.env.NEXT_PUBLIC_LX_GEOSERVER_URL || ""; +const RSONE_DC_URL = process.env.NEXT_PUBLIC_RSONE_DC_URL || ""; export function middleware(req: NextRequest) { console.log("Middleware 진입:", req.nextUrl.pathname); @@ -80,6 +82,17 @@ export function middleware(req: NextRequest) { }); } + if (pathname.startsWith("/dc-service")) { + const requestHeaders = new Headers(req.headers); + const newUrl = `${RSONE_DC_URL}${pathname}`; + + console.log( + `[Middleware] Rewriting from '/dc-service' path to: ${newUrl}`, + ); + return NextResponse.rewrite(new URL(newUrl), { + headers: requestHeaders, + }); + } return NextResponse.next(); } @@ -91,5 +104,7 @@ export const config = { "/user-service/:path*", "/cms-service/:path*", "/sewerage-service/api/v1/map/geometry/:path*", + "/dc-service/:path*", ], + };