From 523d9df0715678a40616583c3749de629549433f Mon Sep 17 00:00:00 2001 From: "younghoon100.park" Date: Thu, 25 Apr 2024 17:09:53 +0900 Subject: [PATCH] =?UTF-8?q?[api,=20actions]=20logActions,=20TLogEvent=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 --- .../src/actions/logActions.js | 154 ++++++++++++++++++ com.twin.app.shoptime/src/api/TLogEvent.js | 92 +++++++++++ 2 files changed, 246 insertions(+) create mode 100644 com.twin.app.shoptime/src/actions/logActions.js create mode 100644 com.twin.app.shoptime/src/api/TLogEvent.js diff --git a/com.twin.app.shoptime/src/actions/logActions.js b/com.twin.app.shoptime/src/actions/logActions.js new file mode 100644 index 00000000..c781cffa --- /dev/null +++ b/com.twin.app.shoptime/src/actions/logActions.js @@ -0,0 +1,154 @@ +import { URLS } from "../api/apiConfig"; +import { clearLaunchParams, getLaunchParams } from "../utils/helperMethods"; +import { TLogEvent } from "../api/TLogEvent"; +import { LOG_MENU_NAME, LOG_TEMPLATE_NUMBER } from "../utils/Config"; + +/** + * IG-LGSP-LOG-001 / Live 시청 이력 + * + * (M) entryMenu 진입 메뉴 + * + * (O) lgCatCd 카테고리 코드 + * + * (O) lgCatNm 카테고리 네임 + * + * (M) logTpNo 로그 타입 넘버 + * + * (M) nowMenu 현재 메뉴 + * + * (M) patncNm 파트너 네임 + * + * (M) patnrId 파트너 아이디 + * + * (M) showId 쇼 아이디 + * + * (M) showNm 쇼 네임 + * + * (O) vdoTpNm 영상 가로 세로 여부 ("Vertical" or "Horizontal") + * + * (M) watchEndDt 시청 종료 시간 + * + * (M) watchStrtDt 시청 시작 시간 + */ +export const postLogLive = (props) => (dispatch, getState) => { + const { logTpNo } = props; + + const params = { + ...props, + entryMenu: props.entryMenu ?? "", + lgCatCd: props.lgCatCd ?? "", + lgCatNm: props.lgCatNm ?? "", + nowMenu: props.nowMenu ?? "", + patncNm: props.patncNm ?? "", + patnrId: props.patnrId ?? "", + showId: props.showId ?? "", + showNm: props.showNm ?? "", + vdoTpNm: props.vdoTpNm ?? "", + watchEndDt: props.watchEndDt ?? "", + watchStrtDt: props.watchStrtDt ?? "", + }; + + const onSuccess = (response) => { + console.log("", response); + console.log("sendLogLive onSuccess", JSON.parse(response.config.data)); + }; + + const onFail = (error) => { + console.error("sendLogLive onFail", error); + }; + + TLogEvent( + dispatch, + getState, + "post", + URLS.LOG_LIVE, + {}, + params, + onSuccess, + onFail + ); +}; + +/** + * IF-LGSP-LOG-003 / Curations View 이력 + * + * (O) cnttTpNm 컨텐츠 타입 네임 "Show" / "item" + * + * (M) curationId 큐레이션 아이디 + * + * (M) curationNm 큐레이션 네임 + * + * (M) entryMenu 진입 메뉴 + * + * (M) expsOrd 노출 순서 + * + * (O) lgCatCd 카테고리 코드 + * + * (O) lgCatNm 카테고리 네임 + * + * (M) logTpNo 로그 타입 넘버 + * + * (M) nowMenu 현재 메뉴 + * + * (M) patncNm 파트너 네임 + * + * (M) patnrId 파트너 아이디 + * + * (O) sortTpNm 정렬 타입 네임 "popular" / "new" + */ +export const postLogQuration = (props) => (dispatch, getState) => { + const { logTpNo } = props; + + let menu; + + switch (logTpNo) { + case LOG_TEMPLATE_NUMBER.CURATION.HOT_PICKS: + menu = LOG_MENU_NAME.MENU_HOTPICKS; + break; + case LOG_TEMPLATE_NUMBER.CURATION.ON_SALE: + menu = LOG_MENU_NAME.MENU_ONSALE; + break; + case LOG_TEMPLATE_NUMBER.CURATION.HOME: + menu = LOG_MENU_NAME.MENU_HOME; + break; + case LOG_TEMPLATE_NUMBER.CURATION.CATEGORY: + menu = LOG_MENU_NAME.MENU_SUBPAGE_CATEGORY; + break; + default: + break; + } + + const params = { + ...props, + cnttTpNm: props.cnttTpNm ?? "", + curationId: props.curationId ?? "", + curationNm: props.curationNm ?? "", + entryMenu: props.entryMenu ?? menu, + expsOrd: props.expsOrd ?? "", + lgCatCd: props.lgCatCd ?? "", + lgCatNm: props.lgCatNm ?? "", + nowMenu: props.nowMenu ?? menu, + patncNm: props.patncNm ?? "", + patnrId: props.patnrId ?? "", + sortTpNm: props.sortTpNm ?? "", + }; + + const onSuccess = (response) => { + console.log("sendLogQuration onSuccess", JSON.parse(response.config.data)); + }; + + const onFail = (error) => { + console.error("sendLogQuration onFail", error); + }; + + TLogEvent( + dispatch, + getState, + "post", + URLS.LOG_CURATION, + {}, + params, + onSuccess, + onFail + ); +}; diff --git a/com.twin.app.shoptime/src/api/TLogEvent.js b/com.twin.app.shoptime/src/api/TLogEvent.js new file mode 100644 index 00000000..1d3fbde1 --- /dev/null +++ b/com.twin.app.shoptime/src/api/TLogEvent.js @@ -0,0 +1,92 @@ +import axios from "axios"; + +import { getUrl, URLS } from "./apiConfig"; +import { clearLaunchParams, getLaunchParams } from "../utils/helperMethods"; +import { createQueryString } from "../utils/helperMethods"; + +export const TLogEvent = ( + dispatch, + getState, + type, + baseUrl, + urlParams = {}, + params = {}, + onSuccess, + onFail +) => { + const httpHeader = getState().common.httpHeader; + const appStatus = getState().common.appStatus; + const AUTHORIZATION = { headers: { ...httpHeader } }; + + const { cntry_cd: cntryCd, plat_cd: platCd, prod_cd: prodCd } = httpHeader; + const { deviceId: dvcId } = appStatus; + const dvcTp = "tv"; + + if (typeof window === "object") { + let url = Array.isArray(baseUrl) + ? getUrl(getState, baseUrl[0]) + : getUrl(getState, baseUrl); + + if (!url) { + return; + } + + // pyh 수정 + if (type === "get") { + const _urlparams = createQueryString(urlParams); + url += _urlparams ? `?${_urlparams}` : ""; + } + + let linkTpCd = ""; + + // pyh 수정 + if (httpHeader) { + const launchParams = getLaunchParams(); + + if (launchParams?.contentTarget) { + const tokens = launchParams.contentTarget.split("_"); + + if (tokens[0] === "V3") { + linkTpCd = tokens[1]; + } + } + } + + const model = { + ...params, + adId: "", + cntryCd, + dvcId, + dvcTp, + linkTpCd, + platCd, + prodCd, + }; + + let axiosInstance; + + switch (type) { + case "get": + axiosInstance = axios.get(url, AUTHORIZATION); + break; + case "post": + axiosInstance = axios.post(url, model, AUTHORIZATION); + break; + } + + if (axiosInstance) { + axiosInstance + .then((res) => { + if (onSuccess) { + onSuccess(res); + } + }) + .catch((error) => { + if (onFail) { + onFail(error); + } + }); + // .finally(clearLaunchParams); + } + } +};