import { countryCode, URLS } from '../api/apiConfig'; import { TLogEvent } from '../api/TLogEvent'; import { LOG_MENU, LOG_TP_NO } from '../utils/Config'; import { formatGMTString, getTimeDifferenceByMilliseconds } from '../utils/helperMethods'; import { setGNBMenu, setSecondLayerInfo } from './commonActions'; import { createDebugHelpers } from '../utils/debug'; // 디버그 헬퍼 설정 const DEBUG_MODE = false; const { dlog, dwarn, derror } = createDebugHelpers(DEBUG_MODE); export const getUrlByLogTpNo = (logTpNo) => { switch (logTpNo) { // IG-LGSP-LOG-001 / Live 시청 이력 case LOG_TP_NO.LIVE.HOME: case LOG_TP_NO.LIVE.FEATURED_BRANDS: case LOG_TP_NO.LIVE.FULL: case LOG_TP_NO.LIVE.ITEM_DETAIL: return URLS.LOG_LIVE; // IG-LGSP-LOG-002 / VOD 시청 이력 case LOG_TP_NO.VOD.FULL_VOD: case LOG_TP_NO.VOD.POPULAR_SHOWS_AND_HOT_PICKS: case LOG_TP_NO.VOD.FEATURED_BRANDS_VOD: // no cases case LOG_TP_NO.VOD.HOME_VOD: case LOG_TP_NO.VOD.ITEM_DETAIL_VOD: case LOG_TP_NO.VOD.FULL_MEDIA: case LOG_TP_NO.VOD.ITEM_DETAIL_MEDIA: return URLS.LOG_VOD; // IF-LGSP-LOG-003 / Curation View 이력 case LOG_TP_NO.CURATION.HOT_PICKS: case LOG_TP_NO.CURATION.SHOWROOM: case LOG_TP_NO.CURATION.ON_SALE: case LOG_TP_NO.CURATION.HOME: case LOG_TP_NO.CURATION.CATEGORY: return URLS.LOG_CURATION; // IF-LGSP-LOG-004 / Entry 이력 case LOG_TP_NO.SECOND_LAYER: return URLS.LOG_SECOND_LAYER; // IF-LGSP-LOG-005 / GNB 클릭 이력 case LOG_TP_NO.GNB: return URLS.LOG_GNB; // IF-LGSP-LOG-006 / 상품 상세 이력 case LOG_TP_NO.PRODUCT.PRODUCT_DETAIL: case LOG_TP_NO.PRODUCT.GROUP_DETAIL: case LOG_TP_NO.PRODUCT.BILLING_PRODUCT_DETAIL: case LOG_TP_NO.PRODUCT.PRODUCT_DETAIL_IMAGE: return URLS.LOG_PRODUCT; // IF-LGSP-LOG-007 / Detail 상세 이력 case LOG_TP_NO.DETAIL.THEME_DETAIL: case LOG_TP_NO.DETAIL.TRAVEL_DETAIL: case LOG_TP_NO.DETAIL.DETAIL_BUTTON_CLICK: return URLS.LOG_DETAIL; // IF-LGSP-LOG-008 / Shop by mobile 이력 case LOG_TP_NO.SHOP_BY_MOBILE.SHOP_BY_MOBILE: case LOG_TP_NO.SHOP_BY_MOBILE.AGREE_AND_SEND: case LOG_TP_NO.SHOP_BY_MOBILE.QR_CODE_REDIRECT_AND_CREATE_TRACKING_LOG: return URLS.LOG_SHOP_BY_MOBILE; // IF-LGSP-LOG-009 / Partners 클릭 이력 case LOG_TP_NO.PARTNERS: return URLS.LOG_PARTNERS; // IF-LGSP-LOG-010 / Reminder - Alert On/Off case LOG_TP_NO.MY_PAGE_ALERT_FLAG: return URLS.LOG_MY_PAGE_ALERT_FLAG; // IF-LGSP-LOG-011 / My Page Delete 버튼 클릭 이력 case LOG_TP_NO.MY_PAGE_MY_DELETE: return URLS.LOG_MY_PAGE_MY_DELETE; // IF-LGSP-LOG-012 / My Page Notice View case LOG_TP_NO.MY_PAGE_NOTICE: return URLS.LOG_MY_PAGE_NOTICE; // IF-LGSP-LOG-013 / 검색 이력 case LOG_TP_NO.SEARCH: return URLS.LOG_SEARCH; // IF-LGSP-LOG-014 / 검색 결과 클릭 이력 case LOG_TP_NO.SEARCH_CLICK: return URLS.LOG_SEARCH_CLICK; // IF-LGSP-LOG-015 / Upcoming On/Off case LOG_TP_NO.UPCOMING_FLAG: return URLS.LOG_UPCOMING_FLAG; // IF-LGSP-LOG-017 / 알람 팝업 case LOG_TP_NO.ALARM_POP: return URLS.LOG_ALARM_POP; // IF-LGSP-LOG-018 / 알람 팝업 OK/NO 클릭 case LOG_TP_NO.ALARM_CLICK.BROADCAST: case LOG_TP_NO.ALARM_CLICK.KEYWORD: return URLS.LOG_ALARM_CLICK; // IF-LGSP-LOG-020 / 테마 상품 상세 이력 → 테마 상품 클릭 이력 case LOG_TP_NO.THEME_PRODUCT: return URLS.LOG_THEME_PRODUCT; // IF-LGSP-LOG-100 / IF-LGSP-LOG-100 / TOP contents 노출 이력 case LOG_TP_NO.TOP_CONTENTS.VIEW: case LOG_TP_NO.TOP_CONTENTS.CLICK: return URLS.LOG_TOP_CONTENTS; // IF-LGSP-LOG-110 / Featured Brands View 이력 case LOG_TP_NO.BRANDS: return URLS.LOG_BRANDS; // IF-LGSP-LOG-101 / 약관 동의, 미동의 클릭 이력 case LOG_TP_NO.TERMS.AGREE: case LOG_TP_NO.TERMS.DO_NOT_AGREE: case LOG_TP_NO.TERMS.TEARMS_CONDITIONS: case LOG_TP_NO.TERMS.PRIVACY_POLICY: return URLS.LOG_TERMS; // IF-LGSP-LOG-102 / LG Account 로그인 이력 case LOG_TP_NO.LG_ACCOUNT_LOGIN: return URLS.LOG_ACCOUNT_LOGIN; // IF-LGSP-LOG-103 / Order 화면 버튼 클릭 이력 case LOG_TP_NO.ORDER_BTN_CLICK: return URLS.LOG_ORDER_BTN_CLICK; // IF-LGSP-LOG-104 / Order 취소/반품/교환 이력 case LOG_TP_NO.ORDER_CHANGE: return URLS.LOG_ORDER_CHANGE; // IF-LGSP-LOG-105 / 쿠폰 사용 이력 case LOG_TP_NO.COUPON_USE: return URLS.LOG_COUPON_USE; // IF-LGSP-LOG-108 / 결제 페이지 진입 이력 case LOG_TP_NO.PAYMENT_ENTRY: return URLS.LOG_PAYMENT_ENTRY; // IF-LGSP-LOG-109 / 결제 완료 이력 case LOG_TP_NO.PAYMENT_COMPLETE: return URLS.LOG_PAYMENT_COMPLETE; // IF-LGSP-LOG-111 / 카드, 주소 ADD/EDIT 이력 case LOG_TP_NO.MY_INFO_EDIT: return URLS.LOG_MY_INFO_EDIT; // IF-LGSP-LOG-112 / Check out 화면 버튼 클릭 이력 case LOG_TP_NO.CHECKOUT_BTN_CLICK: return URLS.LOG_CHECKOUT_BTN_CLICK; default: return; } }; export const postTotalLog = (params, url) => (dispatch, getState) => { const onSuccess = (response) => { // dlog("#Total Log onSuccess.....", response); }; const onFail = (error) => { // derror("totalLog onFail...", error); }; TLogEvent( dispatch, getState, 'post', URLS.LOG_TOTAL_RECOMMEND, {}, params, onSuccess, onFail, true ); }; export const postLog = (params, url) => (dispatch, getState) => { const { logTpNo } = params; const onSuccess = (response) => { // dlog( // `postLog onSuccess logTpNo ${logTpNo}`, // JSON.parse(response.config.data) // ); }; const onFail = (error) => { derror('postLog onFail', error); }; TLogEvent( dispatch, getState, 'post', url ?? getUrlByLogTpNo(logTpNo), {}, params, onSuccess, onFail ); }; /** * deepLink 수신 상태 모니터 * * (?) deeplinkId 딥 링크 아이디 * * (?) flag 딥 링크 여부 */ export const sendLogDeepLinkFlag = (params) => (dispatch, getState) => { const { deeplinkId, flag } = params; dispatch(postLog({ deeplinkId, flag }, URLS.LOG_DEEPLINK)); }; /** * IG-LGSP-LOG-001 / Live 시청 이력 * * (M) entryMenu 진입 메뉴 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 네임 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 네임 * * (M) patnrId 파트너 아이디 * * (M) showId 쇼 아이디 * * (M) showNm 쇼 네임 * * (O) vdoTpNm 영상 가로 세로 여부 ("Vertical" or "Horizontal") * * (M) watchEndDt 시청 종료 시간 * * (M) watchStrtDt 시청 시작 시간 */ export const sendLogLive = (params, callback) => (dispatch, getState) => { const { logTpNo, patncNm, patnrId, showId, watchStrtDt } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!logTpNo || !patncNm || !patnrId || !showId || !watchStrtDt) { dlog('[sendLogLive] invalid params', params); return; } const newParams = { ...params, entryMenu: params?.entryMenu ?? entryMenu, nowMenu: params?.nowMenu ?? nowMenu, watchEndDt: params?.watchEndDt ?? formatGMTString(new Date()), }; if (getTimeDifferenceByMilliseconds(watchStrtDt, newParams.watchEndDt)) { dispatch(postLog(newParams)); if (callback) { callback(); } } }; /** * IG-LGSP-LOG-002 / VOD 시청 이력 * * (M) entryMenu 진입 메뉴 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) showId 방송 아이디 (media case: prdtId) * * (M) showNm 방송 이름 (media case: prdtNm) * * (O) vdoTpNm 영상 가로 세로 여부 ("Vertical" or "Horizontal") * * (M) watchEndDt 시청 종료 시간 * * (M) watchStrtDt 시청 시작 시간 */ export const sendLogVOD = (params, callback) => (dispatch, getState) => { const { logTpNo, showId, watchStrtDt } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!logTpNo || !watchStrtDt) { dlog('[sendLogLive] invalid params', params); return; } if ( (logTpNo === LOG_TP_NO.VOD.FULL_VOD || logTpNo === LOG_TP_NO.VOD.POPULAR_SHOWS_AND_HOT_PICKS || logTpNo === LOG_TP_NO.VOD.FEATURED_BRANDS_VOD || logTpNo === LOG_TP_NO.VOD.HOME_VOD || logTpNo === LOG_TP_NO.VOD.ITEM_DETAIL_VOD) && !showId ) { return; } const newParams = { ...params, entryMenu: params?.entryMenu ?? entryMenu, nowMenu: params?.nowMenu ?? nowMenu, watchEndDt: params?.watchEndDt ?? formatGMTString(new Date()), }; if (getTimeDifferenceByMilliseconds(watchStrtDt, newParams.watchEndDt)) { dispatch(postLog(newParams)); if (callback) { callback(); } } }; /** * IF-LGSP-LOG-003 / Curations View 이력 * * (O) cnttTpNm 컨텐츠 타입 네임 "show" / "item" * * (O) curationId 큐레이션 아이디 * * (O) curationNm 큐레이션 네임 * * (M) entryMenu 진입 메뉴 * * (M) expsOrd 노출 순서 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 네임 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (O) patncNm 파트너 네임 * * (O) patnrId 파트너 아이디 * * (O) sortTpNm 정렬 타입 네임 "popular" / "new" */ export const sendLogCuration = (params) => (dispatch, getState) => { const { logTpNo } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!logTpNo) { dlog('[sendLogCuration] invalid params', params); return; } const newParams = { cnttTpNm: params.cnttTpNm ?? '', curationId: params.curationId ?? '', curationNm: params.curationNm ?? '', entryMenu: entryMenu, expsOrd: params.expsOrd ?? '', lgCatCd: params.lgCatCd ?? '', lgCatNm: params.lgCatNm ?? '', logTpNo: params.logTpNo ?? '', linkTpCd: params.linkTpCd ?? '', nowMenu: nowMenu, patncNm: params.patncNm ?? '', patnrId: params.patnrId ?? '', sortTpNm: params.sortTpNm ?? '', }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-004 / Entry 이력 * * (M) clientIP 클라이언트 아이피 (server) * * (M) entryMenu 진입 메뉴 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) x-device-language 디바이스 언어 (server) * */ export const sendLogSecondLayer = (params) => (dispatch, getState) => { const secondLayerInfo = getState().common.secondLayerInfo; if (secondLayerInfo && Object.keys(secondLayerInfo).length === 0) { return; } dispatch(postLog(params)); dispatch(setSecondLayerInfo({})); }; /** * IF-LGSP-LOG-005 / GNB 클릭 이력 * * (M) entryMenu 진입 메뉴 * * (M) inDt 진입 시간 * * (M) logTpNo 로그 타입 넘버 * * (M) menuMovSno 메뉴 이동 일련번호 * * (M) nowMenu 현재 메뉴 * * (M) outDt 진출 시간 */ export const sendLogGNB = (menu) => (dispatch, getState) => { const { menuMovSno, nowMenu } = getState().common.menu; const secondLayerInfo = getState().common.secondLayerInfo; if (!menu) { dlog('[sendLogGNB] invalid params', menu); return; } if ( ![LOG_MENU.SEARCH_SEARCH, LOG_MENU.SEARCH_RESULT, LOG_MENU.SEARCH_BEST_SELLER].includes(menu) ) { if (menu === nowMenu || !menuMovSno) { return; } } const newParams = { entryMenu: nowMenu, // previous nowMenu inDt: formatGMTString(new Date()), logTpNo: LOG_TP_NO.GNB, menuMovSno: `${menuMovSno}`, nowMenu: menu, outDt: '', }; dispatch(setGNBMenu(menu)); dispatch(postLog(newParams)); if ([1].includes(menuMovSno) && secondLayerInfo && Object.keys(secondLayerInfo).length > 0) { dispatch( sendLogSecondLayer({ ...secondLayerInfo, entryMenu: nowMenu, nowMenu: menu, }) ); dispatch( sendLogDeepLinkFlag({ deeplinkId: secondLayerInfo.deeplinkId, flag: secondLayerInfo.deeplinkId ? 'Y' : 'N', }) ); } }; /** * IF-LGSP-LOG-006 / 상품 상세 이력 * * (M) befPrice 할인 전 가격 * * (O) curationId 큐레이션 아이디 * * (O) curationNm 큐레이션 이름 * * (M) entryMenu 진입 메뉴 * * (O) expsOrd 노출 순번 * * (O) inDt 진입 시간 * * (M) lastPrice 할인 후 가격 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (O) outDt 진출 시간 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) prdtId 상품 아이디 * * (M) prdtNm 상품 이름 * * (O) revwGrd 별점 * * (M) rewdAplyFlag 리워드 적용 여부 * * (M) tsvFlag TSV 여부 */ export const sendLogProductDetail = (params) => (dispatch, getState) => { const { logTpNo } = params; const { entryMenu, nowMenu } = getState().common.menu; const menu = logTpNo === LOG_TP_NO.PRODUCT.PRODUCT_DETAIL_IMAGE ? entryMenu : params?.entryMenu; const outDt = logTpNo === LOG_TP_NO.PRODUCT.PRODUCT_DETAIL_IMAGE ? '' : formatGMTString(new Date()); const newParams = { ...params, entryMenu: menu, nowMenu: nowMenu, outDt, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-007 / Detail 상세 이력 * * (O) curationId 큐레이션 아이디 (Theme의 경우 M, Hotel의 경우 O) * * (O) curationNm 큐레이션 이름 (Theme의 경우 M, Hotel의 경우 O) * * (M) entryMenu 진입 메뉴 * * (O) inDt 진입 시간 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (O) outDt 진출 시간 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 */ export const sendLogDetail = (params) => (dispatch, getState) => { const { logTpNo, patncNm, patnrId } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!logTpNo || !patncNm || !patnrId) { dlog('[sendLogDetail] invalid params', params); return; } const outDt = logTpNo === LOG_TP_NO.DETAIL.DETAIL_BUTTON_CLICK ? '' : formatGMTString(new Date()); const newParams = { ...params, entryMenu: entryMenu, nowMenu: nowMenu, outDt, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-008 / Shop by mobile 이력 * * (M) befPrice 할인 전 가격 * * (O) curationId 큐레이션 아이디 * * (O) curationNm 큐레이션 이름 * * (M) entryMenu 진입 메뉴 * * (O) evntId 이벤트 아이디 * * (O) evntNm 이벤트 이름 * * (M) lastPrice 할인 후 가격 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (O) liveFlag 라이브 여부 * * (O) locDt 디바이스 로컬 일시 * * (M) logTpNo 로그 타입 넘버 * * (M) mbphNoFlag 전화 번호 여부 (모바일 폰 넘버 플래그) * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (O) prdtId 상품 아이디 * * (O) prdtNm 상품 이름 * * (O) revwGrd 별점 (리뷰 그레이드) * * (M) rewdAplyFlag 리워드 적용 여부 * * (M) shopByMobileFlag 샵 바이 모바일 여부 * * (M) shopTpNm 샵 바이 모바일 타입 이름 * * (O) showId 방송 아이디 * * (O) showNm 방송 이름 * * (M) trmsAgrFlag 약관 동의 여부 * * (M) tsvFlag TSV 여부 */ export const sendLogShopByMobile = (params) => (dispatch, getState) => { const { logTpNo } = params; const { entryMenu, nowMenu } = getState().common.menu; const newParams = { ...params, entryMenu: entryMenu, logTpNo, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-009 / Partners 클릭 이력 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 네임 * * (M) patnrId 파트너 아이디 */ export const sendLogPartners = (params) => (dispatch, getState) => { const { patncNm, patnrId } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!patncNm || !patnrId) { dlog('[sendLogPartners] invalid params', params); return; } const newParams = { entryMenu: entryMenu, logTpNo: LOG_TP_NO.PARTNERS, nowMenu: nowMenu, patncNm, patnrId, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-010 / Reminder - Alert On/Off * * (M) alertFlag 설정 여부, On / Off * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 */ export const sendLogMyPageAlertFlag = (params) => (dispatch, getState) => { const { alertFlag } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!alertFlag) { dlog('[sendLogMyPageAlertFlag] invalid params', params); return; } const newParams = { alertFlag, entryMenu: entryMenu, logTpNo: LOG_TP_NO.MY_PAGE_ALERT_FLAG, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-011 / My Page Delete 버튼 클릭 이력 * * (M) cnt 삭제 개수 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 */ export const sendLogMyPageMyDelete = (params) => (dispatch, getState) => { const { cnt } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!cnt) { dlog('[sendLogMyPageMyDelete] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.MY_PAGE_MY_DELETE, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-012 / My Page Notice View * * (M) entryMenu 진입 메뉴 * * (M) itemId Notice/FAQ 등록 번호 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMneu 현재 메뉴 * * (M) title Notice/FAQ 제목 */ export const sendLogMyPageNotice = (params) => (dispatch, getState) => { const { itemId, title } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!itemId || !title) { dlog('[sendLogNoticeView] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.MY_PAGE_NOTICE, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-013 / 검색 이력 * * (M) entryMenu 진입 메뉴 * * (M) inputFlag 입력 구분, keyword / input * * (M) itemCnt 상춤 개수 * * (M) keyword 검색어 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) showCnt 영상 개수 * * (M) themeCnt 테마 개수 */ export const sendLogSearch = (params) => (dispatch, getState) => { const { inputFlag, itemCnt, keyword, showCnt, themeCnt } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!inputFlag || !itemCnt || !keyword || !showCnt || !themeCnt) { dlog('[sendLogSearch] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.SEARCH, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-014 / 검색 결과 클릭 이력 * * (O) curationId 큐레이션 아이디 * * (O) curationNm 큐레이션 이름 * * (O) dcAfPrice 할인후 가격 * * (M) entryMenu 진입 메뉴 * * (M) keyword 검색어 * * (O) lgCatNm LG 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (O) prdtId 상품 아이디 * * (O) prdtNm 상품 이름 * * (O) showId 방송 아이디 * * (O) showNm 방송 이름 */ export const sendLogSearchClick = (params) => (dispatch, getState) => { const { keyword, patncNm, patnrId } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!keyword || !patncNm || !patnrId) { dlog('[sendLogSearchClick] invalid params', params); return; } const newParams = { curationId: params?.curationId ?? '', curationNm: params?.curationNm ?? '', dcAfPrice: params?.dcAfPrice ?? '', entryMenu: entryMenu, keyword, lgCatNm: params?.lgCatNm ?? '', logTpNo: LOG_TP_NO.SEARCH_CLICK, nowMenu: nowMenu, patncNm, patnrId, prdtId: params?.prdtId ?? '', prdtNm: params?.prdtNm ?? '', showId: params?.showId ?? '', showNm: params?.showNm ?? '', }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-015 / Upcoming On/Off * * (M) alertFlag 알림 설정 여부 On/Off * * (M) entryMenu 진입 메뉴 * * (O) hstNm 호스트 이름 * * (M) logTpNo 로그 타입 넘버 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) remainSec 남은 시간(초) * * (M) showId 방송 아이디 * * (M) showNm 방송 이름 */ export const sendLogUpcomingFlag = (params) => (dispatch, getState) => { const { items } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!items) { dlog('[sendLogUpcomingFlag] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.UPCOMING_FLAG, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-017 / 알람 팝업 * * (M) alarmDt 알람 방생 시간 * * (M) alarmType 알람 유형 Upcoming/Keyword * * (M) cnt 키워드 개수 * * (M) entryMenu 진입 메뉴 * * (O) hstNm 호스트 이름 * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) showId 방송 아이디 * * (M) showNm 방송 이름 */ export const sendLogAlarmPop = (params) => (dispatch, getState) => { const { alarmDt, alarmType, cnt, patncNm, patnrId, showId, showNm } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!alarmDt || !alarmType || !cnt || !patncNm || !patnrId || !showId || !showNm) { dlog('[sendLogAlarmPop] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, hstNm: params?.hstNm ?? '', lgCatCd: params?.lgCatCd ?? '', lgCatNm: params?.lgCatNm ?? '', logTpNo: LOG_TP_NO.ALARM_POP, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-018 / 알람 팝업 OK/NO 클릭 * * (M) alarmDt 알람 발생 시간 * * (M) alarmType 알람 유형 Upcoming/Keyword * * (M) clickFlag 클릭 유형 Ok/No * * (M) cnt 키워드 개수 * * (M) entryMenu 진입 메뉴 * * (O) hstNm 호스트 이름 * * (M) keywordList 키워드 리스트(콤마 구분자) * * (O) lgCatCd 카테고리 코드 * * (O) lgCatNm 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) showId 방송 아이디 * * (M) showNm 방송 이름 */ export const sendLogAlarmClick = (params) => (dispatch, getState) => { const { alarmDt, alarmType, clickFlag, cnt, logTpNo, patnrId, showId } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!alarmDt || !alarmType || !clickFlag || !cnt || !logTpNo || !patnrId || !showId) { dlog('[sendLogAlarmClick] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, hstNm: params?.hstNm ?? '', lgCatCd: params?.lgCatCd ?? '', lgCatNm: params?.lgCatNm ?? '', nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-020 / 테마 상품 클릭 이력 * * (M) befPrice 할인 전 가격 * * (M) curationId 큐레이션 아이디 * * (M) curationNm 큐레이션 이름 * * (M) entryMenu 진입 메뉴 * * (M) lastPrice 할인 후 가격 * * (M) lgCatCd 카테고리 코드 * * (M) lgCatNm 카테고리 이름 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) prdtExpsOrd 상품 노출 순번 * * (M) prdtId 상품 아이디 * * (M) prdtNm 상품 이름 * * (M) rewdAplyFlag 리워드 적용 여부 * * (M) shelfExpsOrd 쉘프 노출 순번 * * (M) shelfId 쉘프 아이디 * * (M) shelfNm 쉘프 이름 * * (M) tsvFlag TSV 여부 */ export const sendLogThemeProduct = (params) => (dispatch, getState) => { const { entryMenu, nowMenu } = getState().common.menu; const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.THEME_PRODUCT, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-100 / TOP contents 노출 이력 * * (M) banrNo 배너 번호 * * (O) banrTpNm 배너 유형 이름, Vertical / Horizontal * * (M) contId 컨텐츠 아이디 * * (M) contNm 컨텐츠 이름 * * (M) contTpNm 컨텐츠 타입 이름, live / image / Today's deals * * (M) dspyTpNm 디스플레이 유형 이름, Random / Rolling * * (M) entryMenu 진입 메뉴 * * (M) expsOrd 노출 순서 * * (M) inDt 진입 시간 * * (O) linkTpCd 딥링크 타입 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) outDt 진출 시간 * * (O) patncNm 파트너 이름 * * (O) patnrId 파트너 아이디 * * (M) tmplCd 템플릿 코드 DSP002 01~03 */ export const sendLogTopContents = (params) => (dispatch, getState) => { const { entryMenu, nowMenu } = getState().common.menu; const newParams = { ...params, entryMenu: params?.entryMenu ?? entryMenu, outDt: formatGMTString(new Date()), nowMenu: params?.nowMenu ?? nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-101 / 약관 동의, 미동의 클릭 이력 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 */ export const sendLogTerms = (params) => (dispatch, getState) => { const { logTpNo } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!logTpNo) { dlog('[sendLogTerms] invalid params', params); return; } const newParams = { entryMenu: entryMenu, logTpNo, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-102 / LG Account 로그인 이력 * * (M) entryMenu 진입 메뉴 * * (M) nowMenu 현재 메뉴 * * (M) lginTpNm 로그인 타입 이름 TV/ShopTime * * (M) logTpNo 로그 타입 넘버 * * (M) usrNo 사용자 번호 */ export const sendLogLgAccountLogin = (params) => (dispatch, getState) => { const { lginTpNm, usrNo } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!lginTpNm || !usrNo) { dlog('[sendLogLgAccountLogin] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.LG_ACCOUNT_LOGIN, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-103 / Order 화면 버튼 클릭 이력 * * (M) btnNm 버튼 이름 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * */ export const sendLogOrderBtnClick = (params) => (dispatch, getState) => { const { btnNm } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!btnNm) { dlog('[sendLogOrderBtnClick] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.ORDER_BTN_CLICK, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-104 / Order 취소/반품/교환 이력 (반품/교환 삭제) * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) reqRsn 요청 사유 * * (M) reqTpNm 요청 유형 이름 ("Cancel", "Return", "Exchange") * */ export const sendLogOrderChange = (params) => (dispatch, getState) => { const { reqRsn, reqTpNm } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!reqRsn || !reqTpNm) { dlog('[sendLogOrderChange] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.ORDER_CHANGE, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-105 / 쿠폰 사용 이력 * * (M) cpnSno 쿠폰 일련 번호 * * (M) cpnTtl 쿠폰 제목 * * (M) entryMenu 진입 메뉴 * * (M) lgCatCd 카테고리 코드 * * (M) lgCatNm 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) prodId 상품 아이디 * * (M) prodNm 상품 이름 */ export const sendLogCouponUse = (params) => (dispatch, getState) => { // const {} = params const { entryMenu, nowMenu } = getState().common.menu; // if() { // dlog('[sendLogCouponUse] invalid params', params) // } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.COUPON_USE, nowMenu: nowMenu, }; // dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-108 / 결제 페이지 진입 이력 * * (M) cartTpSno 장바구니 구분 일련번호 ("사용자ID_상품ID_일련번호") * * (M) cpnSno 쿠폰 일련번호 * * (M) cpnTtl 쿠폰 제목 * * (M) dcAftrPrc 할인 후 가격 * * (M) dcBefPrc 할인 전 가격 * * (M) entryMenu 진입 메뉴 * * (M) lgCatCd 카테고리 코드 * * (M) lgCatNm 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) prodId 상품 아이디 * * (M) prodNm 상품 이름 * * (M) prodOptSno 상품 옵션 일련번호 * * (M) qty 수량 */ export const sendLogPaymentEntry = (params) => (dispatch, getState) => { const { cartTpSno, dcAftrPrc, dcBefPrc, patncNm, patnrId, prodId, prodNm, qty } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!cartTpSno || !dcAftrPrc || !dcBefPrc || !patncNm || !patnrId || !prodId || !prodNm || !qty) { dlog('[sendLogPaymentEntry] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.PAYMENT_ENTRY, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-109 / 결제 완료 이력 * * (M) cartTpSno 장바구니 구분 일련번호 ("사용자ID_상품ID_일련번호") * * (M) cpnSno 쿠폰 일련번호 * * (M) cpnTtl 쿠폰 제목 * * (M) dcAftrPrc 할인 후 가격 * * (M) dcBefPrc 할인 전 가격 * * (M) entryMenu 진입 메뉴 * * (M) lgCatCd 카테고리 코드 * * (M) lgCatNm 카테고리 이름 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 이름 * * (M) patnrId 파트너 아이디 * * (M) prodId 상품 아이디 * * (M) prodNm 상품 이름 * * (O) prodOptSno 상품 옵션 일련번호 * * (M) qty 수량 * * (M) usrNo 사용자 번호 */ export const sendLogPaymentComplete = (params) => (dispatch, getState) => { const { cartTpSno, dcAftrPrc, dcBefPrc, patncNm, patnrId, prodId, prodNm, qty, usrNo } = params; const { entryMenu, nowMenu } = getState().common.menu; if ( !cartTpSno || !dcAftrPrc || !dcBefPrc || !patncNm || !patnrId || !prodId || !prodNm || !qty || !usrNo ) { dlog('[sendLogPaymentComplete] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.PAYMENT_COMPLETE, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-110 / Featured Brands View 이력 * * (O) catCd 파트너사 카테고리 코드 * * (O) catNm 파트너사 카테고리 네임 * * (O) crtrId 크리에이터 아이디 * * (O) crtrNm 크리에이터 네임 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 * * (M) patncNm 파트너 네임 * * (M) patnrId 파트너 아이디 * * (O) srsId 시리즈 아이디 * * (O) srsNm 시리즈 이름 */ export const sendLogFeaturedBrands = (params) => (dispatch, getState) => { const { patncNm, patnrId } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!patncNm || !patnrId) { dlog('[sendLogFeaturedBrands] invalid params', params); return; } const newParams = { catCd: params.catCd ?? '', catNm: params.catNm ?? '', crtrId: params.crtrId ?? '', crtrNm: params.crtrNm ?? '', entryMenu: entryMenu, logTpNo: LOG_TP_NO.BRANDS, nowMenu: nowMenu, patncNm, patnrId, srsId: params.srsId ?? '', srsNm: params.srsNm ?? '', }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-111 / 카드, 주소 ADD/EDIT 이력 * * (M) btnNm 버튼 이름 * * (M) etnryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 */ export const sendLogMyInfoEdit = (params) => (dispatch, getState) => { const { btnNm } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!btnNm) { dlog('[sendLogMyInfoEdit] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.MY_INFO_EDIT, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; /** * IF-LGSP-LOG-112 / Check out 화면 버튼 클릭 이력 * * (M) btnNm 버튼 이름 * * (M) entryMenu 진입 메뉴 * * (M) logTpNo 로그 타입 넘버 * * (M) nowMenu 현재 메뉴 */ export const sendLogCheckOutBtnClick = (params) => (dispatch, getState) => { const { btnNm } = params; const { entryMenu, nowMenu } = getState().common.menu; if (!btnNm) { dlog('[sendLogCheckOutBtnClick] invalid params', params); return; } const newParams = { ...params, entryMenu: entryMenu, logTpNo: LOG_TP_NO.CHECKOUT_BTN_CLICK, nowMenu: nowMenu, }; dispatch(postLog(newParams)); }; // IF-LGSP-LOG-200 / 통합 추천 로그 export const sendLogTotalRecommend = (params) => (dispatch, getState) => { let localMacAddress; const { entryMenu } = getState().common.menu; const macAddress = getState().common.macAddress; const userNumber = getState().common.appStatus.loginUserData.userNumber; const macAddr = macAddress?.wired ? macAddress?.wired : macAddress?.wifi; if (typeof window === 'object' && !window.PalmSystem) { localMacAddress = '00:1A:2B:3C:4D:5E'; } const logCreateTime = new Date().toISOString(); // dlog("#params", params); const newParams = { ...params, userNumber: userNumber, macAddr: macAddr ? macAddr : localMacAddress, entryMenu: entryMenu ? entryMenu : 'APP', logCreateTime, }; dispatch(postTotalLog(newParams)); };