diff --git a/com.twin.app.shoptime/src/api/TLogEvent.js b/com.twin.app.shoptime/src/api/TLogEvent.js index 79ada808..99f66416 100644 --- a/com.twin.app.shoptime/src/api/TLogEvent.js +++ b/com.twin.app.shoptime/src/api/TLogEvent.js @@ -2,6 +2,7 @@ import axios from "axios"; import { createQueryString } from "../utils/helperMethods"; import { getUrl } from "./apiConfig"; +import { DEBUG_LOG_MODE, sendToLogServer } from "./logServerClient"; export const TLogEvent = ( dispatch, @@ -68,6 +69,23 @@ export const TLogEvent = ( prodCd, }; } + + // ===== DEBUG_LOG_MODE: 로그서버로 데이터 전송 ===== + if (DEBUG_LOG_MODE) { + sendToLogServer({ + deviceId: dvcId, + cntryCd, + platCd, + prodCd, + appVersion, + deviceLang, + logModel: model, + apiUrl: url, + httpMethod: type, + totalLogFlag, + }); + } + let axiosInstance; switch (type) { diff --git a/com.twin.app.shoptime/src/api/logServerClient.js b/com.twin.app.shoptime/src/api/logServerClient.js new file mode 100644 index 00000000..f0310421 --- /dev/null +++ b/com.twin.app.shoptime/src/api/logServerClient.js @@ -0,0 +1,85 @@ +import axios from 'axios'; + +// ===== DEBUG_LOG_MODE ===== +// true: 로그서버로 데이터 전송 +// false: 로그서버 전송 안함 +export const DEBUG_LOG_MODE = false; + +// ===== 로그서버 기본 설정 ===== +const LOG_SERVER_URL = 'http://api.optsoft.store:55003/api/logs/realtime'; + +/** + * TLogEvent에서 보낸 데이터를 로그서버로 전송 + * + * @param {Object} logData - TLogEvent에서 보낸 로그 데이터 (params + 추가 정보) + * @param {string} logData.deviceId - 디바이스 ID + * @param {string} logData.cntryCd - 국가 코드 (또는 countryCode) + * @param {string} logData.platCd - 플랫폼 코드 + * @param {string} logData.prodCd - 제품 코드 + * @param {string} logData.appVersion - 앱 버전 + * @param {Object} logData.logModel - TLogEvent가 axios로 보낼 모델 객체 + * @param {string} logData.apiUrl - API 엔드포인트 + * @param {string} logData.httpMethod - HTTP 메서드 (get, post) + * + * @returns {Promise} + */ +export async function sendToLogServer(logData) { + if (!DEBUG_LOG_MODE) { + return; + } + + try { + // TLogEvent에서 전달된 messageId 사용, 없으면 null + const messageId = (logData.logModel && logData.logModel.messageId) || null; + + // 로그서버에 전송할 데이터 구성 + const logPayload = { + // ===== 필수 필드 ===== + deviceId: logData.deviceId || logData.dvcId || 'unknown', + messageId: messageId, + logCreateTime: new Date().toISOString(), + + // ===== 로그 기본 정보 ===== + eventType: 'api_call', + apiUrl: logData.apiUrl || 'unknown', + httpMethod: logData.httpMethod || 'POST', + + // ===== 디바이스 & 앱 정보 ===== + countryCode: logData.countryCode || logData.cntryCd || 'unknown', + platformCode: logData.platformCode || logData.platCd || 'unknown', + platformVersion: logData.platformVersion || logData.prodCd || 'unknown', + appVersion: logData.appVersion || 'unknown', + deviceLang: logData.deviceLang || 'unknown', + + // ===== 로그 타입별 데이터 ===== + logTpNo: logData.logTpNo || logData.logType || 'unknown', + entryMenu: logData.entryMenu || 'unknown', + nowMenu: logData.nowMenu || 'unknown', + + // ===== TLogEvent 원본 데이터 (model) ===== + ...(logData.logModel || {}), + }; + + // console.log('[logServerClient] Sending log to server - Full Payload:', logPayload); + // console.log('[logServerClient] Input logData:', logData); + + // 로그서버로 전송 (비동기, 응답 대기 안함) + axios.post(LOG_SERVER_URL, logPayload, { + timeout: 5000, // 5초 타임아웃 + headers: { + 'Content-Type': 'application/json', + }, + }).then((response) => { + // 성공 시 조용하게 처리 + }).catch((error) => { + // 로그서버 전송 실패 시만 오류 로그 출력 + console.error('[logServerClient] Failed to send log to server:', { + url: LOG_SERVER_URL, + error: error.message, + messageId: messageId, + }); + }); + } catch (error) { + // 함수 자체의 오류는 무시 (조용하게 처리) + } +} diff --git a/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/FeaturedBrandsPanel.jsx b/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/FeaturedBrandsPanel.jsx index f6b48392..5475bc6d 100644 --- a/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/FeaturedBrandsPanel.jsx +++ b/com.twin.app.shoptime/src/views/FeaturedBrandsPanel/FeaturedBrandsPanel.jsx @@ -1054,6 +1054,18 @@ const FeaturedBrandsPanel = ({ isOnTop, panelInfo, spotlightId }) => { } }, [isLogGNBSent, isInitialFocusOccurred, selectedPatnrId, selectedPatncNm]); + // effect: partners log for NBCU (patnrId=21) + useEffect(() => { + if (selectedPatnrId === 21 && selectedPatncNm) { + dispatch( + sendLogPartners({ + patncNm: selectedPatncNm, + patnrId: selectedPatnrId, + }) + ); + } + }, [selectedPatnrId, selectedPatncNm]); + // effect: unmount useEffect(() => { return () => {