From 791ec1ae2d06f8a5cc204ab419577da69a6cf1af Mon Sep 17 00:00:00 2001 From: rsone001 Date: Thu, 30 Jul 2026 11:01:02 +0900 Subject: [PATCH] =?UTF-8?q?[ST]=20-=20code-refresh=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/st/app/(main)/(with-base-layout)/layout.tsx | 11 ++++++++++- .../src/entities/statistics/api/statistics-service.ts | 11 +++++++++++ .../entities/statistics/model/statistics-interface.ts | 7 +++++++ apps/st/src/pages/auth/login/ui/login-page.tsx | 6 ++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/apps/st/app/(main)/(with-base-layout)/layout.tsx b/apps/st/app/(main)/(with-base-layout)/layout.tsx index 96468f9d5..19190c901 100644 --- a/apps/st/app/(main)/(with-base-layout)/layout.tsx +++ b/apps/st/app/(main)/(with-base-layout)/layout.tsx @@ -9,7 +9,7 @@ import { } from "@rsone/components"; import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { ENDPOINT } from "@/shared/config"; +import { ENDPOINT, CLAIM_NAME } from "@/shared/config"; import { getCookie, useAlertStore, useMenuStore } from "@/shared/lib"; import { isBbsNoticeMenu } from "@/shared/lib/bbs-notice-menu"; import { @@ -20,8 +20,10 @@ import { useStatisticsTabUrlSync } from "@/shared/lib/use-statistics-tab-url-syn import { isVerificationSelectionReportMenu } from "@/shared/lib/verification-selection-report"; import { StatisticsPageLayout } from "@/shared/ui/statistics-page-layout"; import { authService } from "@/entities/auth"; +import { getToken } from "@/entities/auth/lib/token-manager"; import type { MenuItem } from "@/entities/menu"; import { MenuApi } from "@/entities/menu"; +import { statisticsApi } from "@/entities/statistics/api/statistics-service"; import { BaseLayout } from "@common/components"; import { getConfig } from "@common/config"; @@ -93,6 +95,13 @@ function WithBaseLayoutInner({ children }: { children: React.ReactNode }) { enabled: isLoggedIn, }); + useEffect(() => { + if (!getToken(CLAIM_NAME)) return; + void statisticsApi.refreshCommonCodes().catch(() => { + // 캐시 동기화 실패는 화면 진입을 막지 않음 + }); + }, []); + useEffect(() => { if (menuListData) { setMenuList(menuListData); diff --git a/apps/st/src/entities/statistics/api/statistics-service.ts b/apps/st/src/entities/statistics/api/statistics-service.ts index 5762b0bfe..c987a9a23 100644 --- a/apps/st/src/entities/statistics/api/statistics-service.ts +++ b/apps/st/src/entities/statistics/api/statistics-service.ts @@ -8,6 +8,7 @@ import { type cancelSubmitResponse, type CheckStatusCodeRequest, type CheckStatusCodeResponse, + type CodesRefreshResponse, type getReviewOpinionDetailRequest, type getReviewOpinionDetailResponse, type ImrRequest, @@ -368,6 +369,16 @@ export class StatisticsApiService implements StatisticsService { ); return response.data; } + + /** 공통 코드 메모리 캐시 동기화 */ + public async refreshCommonCodes(): Promise { + const response = await stClient.post( + `${ENDPOINT.ST_SERVICE.INPUTCOMMON}/codes-refresh`, + null, + withAuthHeader(), + ); + return response.data; + } } export const statisticsApi = new StatisticsApiService(); diff --git a/apps/st/src/entities/statistics/model/statistics-interface.ts b/apps/st/src/entities/statistics/model/statistics-interface.ts index b27b1dfc8..f73185eb4 100644 --- a/apps/st/src/entities/statistics/model/statistics-interface.ts +++ b/apps/st/src/entities/statistics/model/statistics-interface.ts @@ -459,6 +459,12 @@ export interface StatiscicsManagementReviewHistoryRequest { statsCd?: string; } +/** 공통 코드 메모리 캐시 동기화 (`INPUTCOMMON/codes-refresh`) 응답 */ +export interface CodesRefreshResponse { + status: string; + message?: string; +} + /** 통계관리 검토 이력 조회 API `data` 배열 요소 */ export interface StatiscicsManagementReviewHistoryItem { statsYr: string; @@ -565,4 +571,5 @@ export interface StatisticsService { StatiscicsExceptionReset(param: StatiscicsExceptionResetRequest): Promise; CheckStatusCode(param: CheckStatusCodeRequest): Promise; getUnSubmitData(param: unSubmitDataRequest): Promise; + refreshCommonCodes(): Promise; } \ No newline at end of file diff --git a/apps/st/src/pages/auth/login/ui/login-page.tsx b/apps/st/src/pages/auth/login/ui/login-page.tsx index c81a6cdc4..0b2f115e3 100644 --- a/apps/st/src/pages/auth/login/ui/login-page.tsx +++ b/apps/st/src/pages/auth/login/ui/login-page.tsx @@ -4,6 +4,7 @@ import { useState } from "react"; import Image from "next/image"; import { authService } from "@/entities/auth"; +import { statisticsApi } from "@/entities/statistics/api/statistics-service"; import { images } from "@common/assets"; import "./login.css"; @@ -21,6 +22,11 @@ function LoginPage() { try { await authService.login({ userId, password }); + try { + await statisticsApi.refreshCommonCodes(); + } catch { + // 로그인 성공 후 캐시 동기화 실패는 진입을 막지 않음 + } window.location.href = "/statistics"; } catch (error) { const message =