[251215] fix: FeaturedBrandsPanel Log추가
🕐 커밋 시간: 2025. 12. 15. 09:38:59 📊 변경 통계: • 총 파일: 3개 • 추가: +30줄 📁 추가된 파일: + com.twin.app.shoptime/src/api/logServerClient.js 📝 수정된 파일: ~ com.twin.app.shoptime/src/api/TLogEvent.js ~ com.twin.app.shoptime/src/views/FeaturedBrandsPanel/FeaturedBrandsPanel.jsx 🔧 주요 변경 내용: • API 서비스 레이어 개선 • 소규모 기능 개선
This commit is contained in:
@@ -2,6 +2,7 @@ import axios from "axios";
|
|||||||
|
|
||||||
import { createQueryString } from "../utils/helperMethods";
|
import { createQueryString } from "../utils/helperMethods";
|
||||||
import { getUrl } from "./apiConfig";
|
import { getUrl } from "./apiConfig";
|
||||||
|
import { DEBUG_LOG_MODE, sendToLogServer } from "./logServerClient";
|
||||||
|
|
||||||
export const TLogEvent = (
|
export const TLogEvent = (
|
||||||
dispatch,
|
dispatch,
|
||||||
@@ -68,6 +69,23 @@ export const TLogEvent = (
|
|||||||
prodCd,
|
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;
|
let axiosInstance;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|||||||
85
com.twin.app.shoptime/src/api/logServerClient.js
Normal file
85
com.twin.app.shoptime/src/api/logServerClient.js
Normal file
@@ -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<void>}
|
||||||
|
*/
|
||||||
|
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) {
|
||||||
|
// 함수 자체의 오류는 무시 (조용하게 처리)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1054,6 +1054,18 @@ const FeaturedBrandsPanel = ({ isOnTop, panelInfo, spotlightId }) => {
|
|||||||
}
|
}
|
||||||
}, [isLogGNBSent, isInitialFocusOccurred, selectedPatnrId, selectedPatncNm]);
|
}, [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
|
// effect: unmount
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user