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, }); };