🕐 커밋 시간: 2025. 11. 24. 12:43:58 📊 변경 통계: • 총 파일: 40개 • 추가: +774줄 • 삭제: -581줄 📝 수정된 파일: ~ com.twin.app.shoptime/src/actions/appDataActions.js ~ com.twin.app.shoptime/src/actions/billingActions.js ~ com.twin.app.shoptime/src/actions/brandActions.js ~ com.twin.app.shoptime/src/actions/cancelActions.js ~ com.twin.app.shoptime/src/actions/cardActions.js ~ com.twin.app.shoptime/src/actions/cartActions.js ~ com.twin.app.shoptime/src/actions/checkoutActions.js ~ com.twin.app.shoptime/src/actions/commonActions.js ~ com.twin.app.shoptime/src/actions/convertActions.js ~ com.twin.app.shoptime/src/actions/couponActions.js ~ com.twin.app.shoptime/src/actions/deviceActions.js ~ com.twin.app.shoptime/src/actions/empActions.js ~ com.twin.app.shoptime/src/actions/eventActions.js ~ com.twin.app.shoptime/src/actions/forYouActions.js ~ com.twin.app.shoptime/src/actions/homeActions.js ~ com.twin.app.shoptime/src/actions/logActions.js ~ com.twin.app.shoptime/src/actions/mediaActions.js ~ com.twin.app.shoptime/src/actions/mockCartActions.js ~ com.twin.app.shoptime/src/actions/myPageActions.js ~ com.twin.app.shoptime/src/actions/onSaleActions.js ~ com.twin.app.shoptime/src/actions/orderActions.js ~ com.twin.app.shoptime/src/actions/panelActions.js ~ com.twin.app.shoptime/src/actions/panelNavigationActions.js ~ com.twin.app.shoptime/src/actions/pinCodeActions.js ~ com.twin.app.shoptime/src/actions/productActions.js ~ com.twin.app.shoptime/src/actions/queuedPanelActions.js ~ com.twin.app.shoptime/src/actions/searchActions.js ~ com.twin.app.shoptime/src/actions/shippingActions.js ~ com.twin.app.shoptime/src/actions/voiceActions.js ~ com.twin.app.shoptime/src/actions/webSpeechActions.js ~ com.twin.app.shoptime/src/reducers/localSettingsReducer.js ~ com.twin.app.shoptime/src/reducers/mediaOverlayReducer.js ~ com.twin.app.shoptime/src/reducers/mockCartReducer.js ~ com.twin.app.shoptime/src/reducers/playReducer.js ~ com.twin.app.shoptime/src/reducers/productReducer.js ~ com.twin.app.shoptime/src/reducers/videoOverlayReducer.js ~ com.twin.app.shoptime/src/views/UserReview/ShowUserReviews.jsx ~ com.twin.app.shoptime/src/views/UserReview/UserReviewPanel.jsx ~ com.twin.app.shoptime/src/views/UserReview/components/UserReviewsList.jsx ~ com.twin.app.shoptime/src/views/UserReview/components/VirtualScrollBar.jsx 🔧 함수 변경 내용: 📊 Function-level changes summary across 40 files: • Functions added: 14 • Functions modified: 34 • Functions deleted: 18 📋 By language: • javascript: 40 files, 66 function changes 🔧 주요 변경 내용: • 핵심 비즈니스 로직 개선 • 로깅 시스템 개선 • 설정 관리 시스템 개선 • UI 컴포넌트 아키텍처 개선
353 lines
7.9 KiB
JavaScript
353 lines
7.9 KiB
JavaScript
import { URLS } from '../api/apiConfig';
|
|
import { TAxios } from '../api/TAxios';
|
|
import { types } from './actionTypes';
|
|
import { showError } from './commonActions';
|
|
import { createDebugHelpers } from '../utils/debug';
|
|
|
|
// 디버그 헬퍼 설정
|
|
const DEBUG_MODE = false;
|
|
const { dlog, dwarn, derror } = createDebugHelpers(DEBUG_MODE);
|
|
|
|
/**
|
|
* 회원 장바구니 정보 조회
|
|
* @param {Object} props - { mbrNo: 회원번호 }
|
|
*/
|
|
export const getMyInfoCartSearch = (props) => (dispatch, getState) => {
|
|
const { mbrNo } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('getMyInfoCartSearch onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.GET_MY_INFO_CART_SEARCH,
|
|
payload: response.data.data,
|
|
});
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('getMyInfoCartSearch OnFail: ', error);
|
|
|
|
// 실패 시에도 빈 데이터로 초기화
|
|
dispatch({
|
|
type: types.GET_MY_INFO_CART_SEARCH,
|
|
payload: { cartList: [] },
|
|
});
|
|
};
|
|
|
|
// API URL이 정의되어 있지 않은 경우 임시로 빈 데이터 반환
|
|
if (!URLS.GET_MY_INFO_CART_SEARCH) {
|
|
dwarn('GET_MY_INFO_CART_SEARCH URL이 정의되지 않았습니다.');
|
|
dispatch({
|
|
type: types.GET_MY_INFO_CART_SEARCH,
|
|
payload: { cartList: [] },
|
|
});
|
|
return;
|
|
}
|
|
|
|
TAxios(dispatch, getState, 'get', URLS.GET_MY_INFO_CART_SEARCH, { mbrNo }, {}, onSuccess, onFail);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 추가 API
|
|
*/
|
|
export const insertMyinfoCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo, patnrId, prdtId, prdtOpt, prodQty } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('✅ insertMyinfoCart API 성공:', response.data.retCode);
|
|
// if (response.data?.retCode !== '0' && response.data.retCode !== 0) {
|
|
// derror("❌ retCode 에러:", response.data.retCode);
|
|
// derror("에러 메시지:", response.data.retMsg);
|
|
|
|
// return;
|
|
// }
|
|
|
|
if (response.data.retCode === 0) {
|
|
dispatch({
|
|
type: types.INSERT_MY_INFO_CART,
|
|
payload: response.data.data,
|
|
});
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
} else {
|
|
dispatch(showError(response.data.retCode, response.data.retMsg, false, null, null));
|
|
derror('❌ retCode 에러:', response.data.retCode);
|
|
derror('에러 메시지:', response.data.retMsg);
|
|
}
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('insertMyinfoCart OnFail: ', error);
|
|
};
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'post',
|
|
URLS.INSERT_MY_INFO_CART,
|
|
{},
|
|
{ mbrNo, patnrId, prdtId, prdtOpt, prodQty },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 삭제 API
|
|
*/
|
|
export const deleteMyinfoCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo, patnrId, prdtId, prodSno } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('deleteMyinfoCart onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.DELETE_MY_INFO_CART,
|
|
payload: response.data.data,
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('deleteMyinfoCart OnFail: ', error);
|
|
};
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'post',
|
|
URLS.DELETE_MY_INFO_CART,
|
|
{},
|
|
{ mbrNo, patnrId, prdtId, prodSno },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 전체 삭제
|
|
*/
|
|
export const deleteAllMyinfoCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('deleteAllMyinfoCart onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.DELETE_ALL_MY_INFO_CART,
|
|
payload: response.data.data,
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('deleteAllMyinfoCart OnFail: ', error);
|
|
};
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'post',
|
|
URLS.DELETE_ALL_MY_INFO_CART,
|
|
{},
|
|
{ mbrNo },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 체크박스 토글
|
|
* @param {Object} item - 선택된 상품 정보
|
|
* @param {Boolean} isChecked - 선택 여부
|
|
*/
|
|
export const toggleCheckCart = (item, isChecked) => (dispatch) => {
|
|
dispatch({
|
|
type: types.TOGGLE_CHECK_CART,
|
|
payload: {
|
|
item: item,
|
|
isChecked: isChecked,
|
|
timestamp: Date.now(),
|
|
},
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 수정
|
|
*/
|
|
export const updateMyinfoCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo, patnrId, prdtId, prodQty, prodSno } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('updateMyinfoCart onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.UPDATE_MY_INFO_CART,
|
|
payload: response.data.data,
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('updateMyinfoCart OnFail: ', error);
|
|
};
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'post',
|
|
URLS.UPDATE_MY_INFO_CART,
|
|
{},
|
|
{ mbrNo, patnrId, prdtId, prodQty, prodSno },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니에 상품 추가
|
|
* @param {Object} props - 장바구니 상품 정보
|
|
*/
|
|
export const addToCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo, patnrId, prdtId, prodOptCdCval, prodQty, prdtOpt } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('addToCart onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.ADD_TO_CART,
|
|
payload: response.data.data,
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('addToCart OnFail: ', error);
|
|
};
|
|
|
|
// API URL이 정의되어 있지 않은 경우 로컬 상태만 업데이트
|
|
if (!URLS.ADD_TO_CART) {
|
|
dwarn('ADD_TO_CART URL이 정의되지 않았습니다.');
|
|
dispatch({
|
|
type: types.ADD_TO_CART,
|
|
payload: { patnrId, prdtId, prodOptCdCval, prodQty, prdtOpt },
|
|
});
|
|
return;
|
|
}
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'post',
|
|
URLS.ADD_TO_CART,
|
|
{},
|
|
{ mbrNo, patnrId, prdtId, prodOptCdCval, prodQty, prdtOpt },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니에서 상품 제거
|
|
* @param {Object} props - { mbrNo, cartSno }
|
|
*/
|
|
export const removeFromCart = (props) => (dispatch, getState) => {
|
|
const { mbrNo, cartSno } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('removeFromCart onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.REMOVE_FROM_CART,
|
|
payload: { cartSno },
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('removeFromCart OnFail: ', error);
|
|
};
|
|
|
|
if (!URLS.REMOVE_FROM_CART) {
|
|
dwarn('REMOVE_FROM_CART URL이 정의되지 않았습니다.');
|
|
dispatch({
|
|
type: types.REMOVE_FROM_CART,
|
|
payload: { cartSno },
|
|
});
|
|
return;
|
|
}
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'delete',
|
|
URLS.REMOVE_FROM_CART,
|
|
{ mbrNo, cartSno },
|
|
{},
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 상품 수량 업데이트
|
|
* @param {Object} props - { mbrNo, cartSno, prodQty }
|
|
*/
|
|
export const updateCartItem = (props) => (dispatch, getState) => {
|
|
const { mbrNo, cartSno, prodQty } = props;
|
|
|
|
const onSuccess = (response) => {
|
|
dlog('updateCartItem onSuccess: ', response.data);
|
|
|
|
dispatch({
|
|
type: types.UPDATE_CART_ITEM,
|
|
payload: { cartSno, prodQty },
|
|
});
|
|
|
|
// 장바구니 목록 재조회
|
|
dispatch(getMyInfoCartSearch({ mbrNo }));
|
|
};
|
|
|
|
const onFail = (error) => {
|
|
derror('updateCartItem OnFail: ', error);
|
|
};
|
|
|
|
if (!URLS.UPDATE_CART_ITEM) {
|
|
dwarn('UPDATE_CART_ITEM URL이 정의되지 않았습니다.');
|
|
dispatch({
|
|
type: types.UPDATE_CART_ITEM,
|
|
payload: { cartSno, prodQty },
|
|
});
|
|
return;
|
|
}
|
|
|
|
TAxios(
|
|
dispatch,
|
|
getState,
|
|
'put',
|
|
URLS.UPDATE_CART_ITEM,
|
|
{},
|
|
{ mbrNo, cartSno, prodQty },
|
|
onSuccess,
|
|
onFail
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 장바구니 전체 비우기
|
|
*/
|
|
export const clearCart = () => (dispatch) => {
|
|
dispatch({
|
|
type: types.CLEAR_CART,
|
|
});
|
|
};
|