diff --git a/apps/sn/.env.production b/apps/sn/.env.production new file mode 100644 index 000000000..fab02e36c --- /dev/null +++ b/apps/sn/.env.production @@ -0,0 +1,12 @@ +NEXT_PUBLIC_SITE_ID = SN +NEXT_PUBLIC_PORT = 11302 +NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11302 +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_CLAIM_NAME = Authorization +NEXT_PUBLIC_AUTH_USER_ID = token-id +NEXT_PUBLIC_ACCESS_TOKEN = access-token +NEXT_PUBLIC_REFRESH_TOKEN = refresh-token + +NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083/sewerage-service/api # 개발 서버 API diff --git a/apps/sn/app/components/lib/utils/fileDeleteUtil.tsx b/apps/sn/app/components/lib/utils/fileDeleteUtil.tsx index f487034d1..4cadd12e8 100644 --- a/apps/sn/app/components/lib/utils/fileDeleteUtil.tsx +++ b/apps/sn/app/components/lib/utils/fileDeleteUtil.tsx @@ -1,4 +1,4 @@ -import { getCookie } from "@/components/lib/utils"; +import { getCookie } from "@/shared/lib"; import { ENDPOINT } from "../api/attachment/attachment-service"; const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/sn/app/components/lib/utils/fileUploadUtil.tsx b/apps/sn/app/components/lib/utils/fileUploadUtil.tsx index 195a96b0d..3bfb35f00 100644 --- a/apps/sn/app/components/lib/utils/fileUploadUtil.tsx +++ b/apps/sn/app/components/lib/utils/fileUploadUtil.tsx @@ -1,5 +1,5 @@ import { Upload, type HttpResponse } from "tus-js-client"; -import { getCookie, setCookie } from "@/components/lib/utils"; +import { getCookie, setCookie } from "@/shared/lib"; import { ENDPOINT } from "../api/attachment/attachment-service"; const AUTH_USER_ID = process.env.NEXT_PUBLIC_AUTH_USER_ID || "token-id"; diff --git a/apps/sn/app/components/lib/utils/index.tsx b/apps/sn/app/components/lib/utils/index.tsx index 9a41c2740..272ca7ada 100644 --- a/apps/sn/app/components/lib/utils/index.tsx +++ b/apps/sn/app/components/lib/utils/index.tsx @@ -1,4 +1,3 @@ -export * from "./cookie"; export * from "./fileUploadUtil"; export * from "./fileDownload"; export * from './date' diff --git a/apps/sn/app/page.tsx b/apps/sn/app/page.tsx index d19bd5e79..9bfdbb656 100644 --- a/apps/sn/app/page.tsx +++ b/apps/sn/app/page.tsx @@ -1,50 +1,29 @@ -import { Button } from "@common/components"; -import Link from "next/link"; -import { redirect } from "next/navigation"; +"use client"; +import { LoginApi } from "@/entities/auth"; +import { useEffect } from "react"; +import { getCookie } from "@/shared/lib"; +import { AUTH_USER_ID } from "@/shared/config"; +import { useRouter } from "next/navigation"; export default function Home() { - redirect("/map"); + const router = useRouter(); + const userId = "admin1gmail"; + const password = "test1234!"; + const checkToken = getCookie(AUTH_USER_ID); - // return ( - //
- //
- //

하수관망도

- //
- // - // - // - //
- //
- //
- //

운영정보 관리

- //
- // - // - // - // - // - // - //
- //
- //
- //

- // I/I 분석(기초정보 설정) - //

- //
- // - // - // - // - // - // - // - // - // - // - // - // - //
- //
- //
- // ); + useEffect(() => { + if (!checkToken) { + async function doLogin() { + try { + await LoginApi.login({ userId, password }); + window.location.href = "/map"; + } catch (err) { + console.error("로그인 실패", err); + } + } + doLogin(); + } else { + router.push("/map"); + } + }, []); } diff --git a/apps/sn/package.json b/apps/sn/package.json index 95ec8f3e9..83e13a8ed 100644 --- a/apps/sn/package.json +++ b/apps/sn/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev -p 3002", "build": "next build", - "start": "next start", + "start:sn": "next start -p 3002", "lint": "next lint" }, "dependencies": { @@ -18,7 +18,6 @@ "@radix-ui/react-label": "^2.1.2", "@radix-ui/react-slot": "^1.1.2", "@tanstack/react-query": "^5.67.1", - "@tanstack/react-query-devtools": "^5.75.5", "@tanstack/react-table": "^8.21.2", "axios": "^1.8.1", "chart.js": "^4.4.8", @@ -53,3 +52,6 @@ "typescript": "^5" } } + + + diff --git a/apps/sn/src/entities/auth/lib/auth-wrapper.tsx b/apps/sn/src/entities/auth/lib/auth-wrapper.tsx index c09ca55c6..f0710e249 100644 --- a/apps/sn/src/entities/auth/lib/auth-wrapper.tsx +++ b/apps/sn/src/entities/auth/lib/auth-wrapper.tsx @@ -6,10 +6,8 @@ import { client } from "@/shared/api"; import type { IUserInfo } from "@/shared/store"; import { useUserStore } from "@/shared/lib"; import { ENDPOINT, AUTH_USER_ID } from "@/shared/config"; -import { getCookie } from "@/components/lib/utils"; -import axios from "axios"; +import { getCookie } from "@/shared/lib"; import { LoginApi } from "../api/login-service"; -import { tokenManager } from "../lib/token-manager"; const CLAIM_NAME = process.env.NEXT_PUBLIC_CLAIM_NAME || "Authorization"; @@ -18,32 +16,14 @@ const AuthWrapper = ({ children }: { children: React.ReactNode }) => { const { userInfo, setUserInfo } = useUserStore((state) => state); async function authCheck() { - const checkToken = getCookie(AUTH_USER_ID); - - - if (!checkToken) { - //TODO 나중에 수정해야.... - const userId = "admin1gmail"; - const password = "test1234!"; - await LoginApi.login({ userId, password }); - // window.location.href = "http://dev.onasys.co.kr/auth/login"; - // throw new Error("Missing required authentication tokens"); + const userId = getCookie(AUTH_USER_ID); + if (!userId) { + throw new Error("Missing required authentication tokens"); } - const accessToken = tokenManager.getToken(CLAIM_NAME); - const tokenId = tokenManager.getToken(AUTH_USER_ID); - - const response = await axios.get( + const response = await client.get( `${ENDPOINT.USER_SERVICE.USERS}/info/me`, - { - withCredentials: true, - headers: { - [CLAIM_NAME]: accessToken, - [AUTH_USER_ID]: tokenId ?? "", - }, - }, ); - if (!userInfo) setUserInfo(response.data); } @@ -60,12 +40,7 @@ const AuthWrapper = ({ children }: { children: React.ReactNode }) => { } catch (refreshError) { console.error("Token refresh failed:", refreshError); setUserInfo(null); - - // TODO 운영에 반영 할때 수정해야..... - // 현재 경로가 로그인 페이지가 아닐 때만 redirect - // if (!pathname.startsWith("/auth/login")) { - // window.location.href = "http://dev.onasys.co.kr/auth/login"; - // } + router.push("/"); } } })(); diff --git a/apps/sn/src/entities/auth/lib/token-manager.ts b/apps/sn/src/entities/auth/lib/token-manager.ts index bf3d68265..6387f06e5 100644 --- a/apps/sn/src/entities/auth/lib/token-manager.ts +++ b/apps/sn/src/entities/auth/lib/token-manager.ts @@ -1,5 +1,5 @@ import { AUTH_USER_ID, CLAIM_NAME } from "@/shared/config"; -import { getCookie, setCookie, removeCookie } from "@/components/lib/utils"; +import { getCookie, setCookie, removeCookie } from "@/shared/lib";; export class TokenManager { private static instance: TokenManager; diff --git a/apps/sn/src/entities/menu/lib/menu-wrapper.tsx b/apps/sn/src/entities/menu/lib/menu-wrapper.tsx index e00d3696e..79a29a09c 100644 --- a/apps/sn/src/entities/menu/lib/menu-wrapper.tsx +++ b/apps/sn/src/entities/menu/lib/menu-wrapper.tsx @@ -4,7 +4,7 @@ import { useEffect } from "react"; import { usePathname, useRouter } from "next/navigation"; import { MenuAuthorityApi } from "@/entities/menu-authority/@x/menu"; import { useAlertStore, useMenuStore } from "@/shared/lib"; -import { getCookie } from "@/components/lib/utils"; +import { getCookie } from "@/shared/lib";; import { SITE_ID } from "@/shared/config"; import { MenuApi } from "../api/menu-service"; import { getCurrentMenu } from "./utils"; diff --git a/apps/sn/src/shared/api/client.ts b/apps/sn/src/shared/api/client.ts index 709bb44a5..cf37e6671 100644 --- a/apps/sn/src/shared/api/client.ts +++ b/apps/sn/src/shared/api/client.ts @@ -1,6 +1,9 @@ import { Client } from "@common/network"; import { BASE_URL } from "../config/api"; import { SITE_ID } from "../config/env"; +import { setCookie } from "../lib"; + +setCookie("site-id-key", SITE_ID); export const client = Client.getInstance({ baseURL: BASE_URL, diff --git a/apps/sn/app/components/lib/utils/cookie.tsx b/apps/sn/src/shared/lib/cookie.ts similarity index 100% rename from apps/sn/app/components/lib/utils/cookie.tsx rename to apps/sn/src/shared/lib/cookie.ts diff --git a/apps/sn/src/shared/lib/index.ts b/apps/sn/src/shared/lib/index.ts index bca6d2476..b8b4c52c0 100644 --- a/apps/sn/src/shared/lib/index.ts +++ b/apps/sn/src/shared/lib/index.ts @@ -3,3 +3,4 @@ export { useAlertStore } from "./use-alert-store"; export { useMenuStore } from "./use-menu-store"; export { useUserStore } from "./use-user-store"; export { usePrompt } from "./use-prompt"; +export { getCookie, setCookie, removeCookie } from "./cookie";