Browse Source

qna 사용자 문의 상세,삭제 api 추가

pull/2/head
hhjk00 11 months ago
parent
commit
ef1a18c97f
  1. 10
      src/containers/cstmrService/inquiry/UserInquiryContainer.js
  2. 61
      src/modules/cstmrService/inquiry/action/index.ts
  3. 14
      src/modules/cstmrService/inquiry/apis/index.ts
  4. 46
      src/modules/cstmrService/inquiry/model/index.ts
  5. 13
      src/modules/cstmrService/inquiry/reducers/index.ts
  6. 95
      src/modules/cstmrService/inquiry/sagas/index.ts

10
src/containers/cstmrService/inquiry/UserInquiryContainer.js

@ -11,7 +11,7 @@ import { ConfirmModal } from '../../../components/modal/ConfirmModal';
export default function UserInquiryContainer({ memberName }) { export default function UserInquiryContainer({ memberName }) {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { userList: lists, adminDetail: detail } = useSelector( const { userList: lists, userDetail: detail } = useSelector(
state => state.qnaState state => state.qnaState
); );
@ -122,9 +122,9 @@ export default function UserInquiryContainer({ memberName }) {
// 1:1 문의/수정 Modal handler // 1:1 문의/수정 Modal handler
const handlerInquiryModal = qnaSno => { const handlerInquiryModal = qnaSno => {
if (!isInquiryModalOpen && qnaSno) { if (!isInquiryModalOpen && qnaSno) {
dispatch(Actions.ADMIN_DETAIL.request(qnaSno)); dispatch(Actions.USER_DETAIL.request(qnaSno));
} else { } else {
dispatch(Actions.ADMIN_DETAIL_INITAL()); dispatch(Actions.USER_DETAIL_INITAL());
setInquiryForm({ setInquiryForm({
category: '칭찬', category: '칭찬',
contact: '', contact: '',
@ -204,7 +204,7 @@ export default function UserInquiryContainer({ memberName }) {
dispatch(Actions.USER_INQUIRY.request(form)); dispatch(Actions.USER_INQUIRY.request(form));
} else if (type === 'edit') { } else if (type === 'edit') {
dispatch( dispatch(
Actions.USER_INQUIRY_UPDATE.request({ Actions.USER_UPDATE.request({
qnaSno, qnaSno,
category, category,
contact, contact,
@ -232,7 +232,7 @@ export default function UserInquiryContainer({ memberName }) {
// 문의 삭제 // 문의 삭제
const handlerDeleteInquiry = () => { const handlerDeleteInquiry = () => {
const { qnaSno } = inquiryForm; const { qnaSno } = inquiryForm;
dispatch(Actions.ADMIN_DELETE.request({ qnaSno, role: 'user' })); dispatch(Actions.USER_DELETE.request({ qnaSno }));
setIsInquiryModalOpen(false); setIsInquiryModalOpen(false);
}; };

61
src/modules/cstmrService/inquiry/action/index.ts

@ -10,7 +10,8 @@ import {
IQnaUserList, IQnaUserList,
IQnaUserSearch, IQnaUserSearch,
IQnaUserInquiry, IQnaUserInquiry,
IQnaUserInquiryUpdate IQnaUserDetail,
IQnaUserUpdate
} from '../model'; } from '../model';
// 관리자 목록 조회 // 관리자 목록 조회
@ -51,13 +52,23 @@ const USER_INQUIRY_REQUEST = 'cstmrService/qna/USER_INQUIRY_REQUEST';
const USER_INQUIRY_SUCCESS = 'cstmrService/qna/USER_INQUIRY_SUCCESS'; const USER_INQUIRY_SUCCESS = 'cstmrService/qna/USER_INQUIRY_SUCCESS';
const USER_INQUIRY_FAILURE = 'cstmrService/qna/USER_INQUIRY_FAILURE'; const USER_INQUIRY_FAILURE = 'cstmrService/qna/USER_INQUIRY_FAILURE';
// 사용자 문의 상세보기
const USER_DETAIL_REQUEST = 'cstmrService/qna/USER_DETAIL_REQUEST';
const USER_DETAIL_SUCCESS = 'cstmrService/qna/USER_DETAIL_SUCCESS';
const USER_DETAIL_FAILURE = 'cstmrService/qna/USER_DETAIL_FAILURE';
// 관리자 문의 상세보기 초기화
const USER_DETAIL_INITAL_ACTION = 'cstmrService/qna/USER_DETAIL_INITAL';
// 사용자 문의 삭제
const USER_DELETE_REQUEST = 'cstmrService/qna/USER_DELETE_REQUEST';
const USER_DELETE_SUCCESS = 'cstmrService/qna/USER_DELETE_SUCCESS';
const USER_DELETE_FAILURE = 'cstmrService/qna/USER_DELETE_FAILURE';
// 사용자 문의 수정 // 사용자 문의 수정
const USER_INQUIRY_UPDATE_REQUEST = const USER_UPDATE_REQUEST = 'cstmrService/qna/USER_UPDATE_REQUEST';
'cstmrService/qna/USER_INQUIRY_UPDATE_REQUEST'; const USER_UPDATE_SUCCESS = 'cstmrService/qna/USER_UPDATE_SUCCESS';
const USER_INQUIRY_UPDATE_SUCCESS = const USER_UPDATE_FAILURE = 'cstmrService/qna/USER_UPDATE_FAILURE';
'cstmrService/qna/USER_INQUIRY_UPDATE_SUCCESS';
const USER_INQUIRY_UPDATE_FAILURE =
'cstmrService/qna/USER_INQUIRY_UPDATE_FAILURE';
export const ADMIN_LIST = createAsyncAction( export const ADMIN_LIST = createAsyncAction(
ADMIN_LIST_REQUEST, ADMIN_LIST_REQUEST,
@ -95,7 +106,6 @@ export const ADMIN_DELETE = createAsyncAction(
anserStatus: string; anserStatus: string;
createUserNm: string; createUserNm: string;
qnaSno: number; qnaSno: number;
role: string;
}, },
{}, {},
AxiosError AxiosError
@ -113,11 +123,31 @@ export const USER_INQUIRY = createAsyncAction(
USER_INQUIRY_FAILURE USER_INQUIRY_FAILURE
)<IQnaUserInquiry, {}, AxiosError>(); )<IQnaUserInquiry, {}, AxiosError>();
export const USER_INQUIRY_UPDATE = createAsyncAction( export const USER_DETAIL = createAsyncAction(
USER_INQUIRY_UPDATE_REQUEST, USER_DETAIL_REQUEST,
USER_INQUIRY_UPDATE_SUCCESS, USER_DETAIL_SUCCESS,
USER_INQUIRY_UPDATE_FAILURE USER_DETAIL_FAILURE
)<IQnaUserInquiryUpdate, {}, AxiosError>(); )<number, IQnaUserDetail, AxiosError>();
export const USER_DETAIL_INITAL = createAction(USER_DETAIL_INITAL_ACTION)();
export const USER_UPDATE = createAsyncAction(
USER_UPDATE_REQUEST,
USER_UPDATE_SUCCESS,
USER_UPDATE_FAILURE
)<IQnaUserUpdate, {}, AxiosError>();
export const USER_DELETE = createAsyncAction(
USER_DELETE_REQUEST,
USER_DELETE_SUCCESS,
USER_DELETE_FAILURE
)<
{
qnaSno: number;
},
{},
AxiosError
>();
const actions = { const actions = {
ADMIN_LIST, ADMIN_LIST,
@ -128,7 +158,10 @@ const actions = {
ADMIN_DELETE, ADMIN_DELETE,
USER_LIST, USER_LIST,
USER_INQUIRY, USER_INQUIRY,
USER_INQUIRY_UPDATE USER_DETAIL,
USER_DETAIL_INITAL,
USER_UPDATE,
USER_DELETE
}; };
export type QnaAction = ActionType<typeof actions>; export type QnaAction = ActionType<typeof actions>;

14
src/modules/cstmrService/inquiry/apis/index.ts

@ -1,10 +1,6 @@
import axios from '../../../utils/customAxiosUtil'; import axios from '../../../utils/customAxiosUtil';
import qs from 'qs'; import qs from 'qs';
import { import { IQnaUserInquiry, IQnaUserSearch, IQnaUserUpdate } from '../model';
IQnaUserInquiry,
IQnaUserInquiryUpdate,
IQnaUserSearch
} from '../model';
export const qnaAPI = { export const qnaAPI = {
adminList: async (data: { adminList: async (data: {
@ -73,7 +69,10 @@ export const qnaAPI = {
} }
}); });
}, },
userInquiryUpdate: async (data: IQnaUserInquiryUpdate) => { userDetail: async (qnaSno: number) => {
return await axios.get(`api/cns/qna/${qnaSno}`);
},
userUpdate: async (data: IQnaUserUpdate) => {
const params = {}; const params = {};
Object.keys(data).forEach(i => { Object.keys(data).forEach(i => {
if (data[i]) { if (data[i]) {
@ -86,5 +85,8 @@ export const qnaAPI = {
}); });
return await axios.put(`api/cns/qna${queryString}`); return await axios.put(`api/cns/qna${queryString}`);
},
userDelete: async (qnaSno: number) => {
return await axios.delete(`api/cns/qna/${qnaSno}`);
} }
}; };

46
src/modules/cstmrService/inquiry/model/index.ts

@ -2,6 +2,7 @@ export interface IQnaState {
adminList: IQnaAdminList[]; adminList: IQnaAdminList[];
adminDetail: IQnaAdminDetail; adminDetail: IQnaAdminDetail;
userList: IQnaUserList[]; userList: IQnaUserList[];
userDetail: IQnaUserDetail;
} }
export interface IQnaAdminList { export interface IQnaAdminList {
@ -96,7 +97,28 @@ export interface IQnaUserInquiry {
content: string; content: string;
} }
export interface IQnaUserInquiryUpdate extends IQnaUserInquiry { export interface IQnaUserDetail {
qnaSno: number;
targetSno: number;
category: string;
title: string;
content: string;
anserContent: string;
anserStatus: string;
anserProcDt: string;
anserUserNm: string;
viewCnt: number;
fileGroupNo: number;
expsrYn: string;
createUserNm: string;
createUserId: string;
createDt: string;
updateUserId: string;
updateDt: string;
files: IQnaFiles[];
}
export interface IQnaUserUpdate extends IQnaUserInquiry {
qnaSno: number; qnaSno: number;
} }
@ -122,5 +144,25 @@ export const initalState = {
updateDt: '', updateDt: '',
files: [] files: []
}, },
userList: [] userList: [],
userDetail: {
qnaSno: 0,
targetSno: 0,
category: '',
title: '',
content: '',
anserContent: '',
anserStatus: '',
anserProcDt: '',
anserUserNm: '',
viewCnt: 0,
fileGroupNo: 0,
expsrYn: '',
createUserNm: '',
createUserId: '',
createDt: '',
updateUserId: '',
updateDt: '',
files: []
}
}; };

13
src/modules/cstmrService/inquiry/reducers/index.ts

@ -32,4 +32,17 @@ export const qnaReducer = createReducer<IQnaState, Actions.QnaAction>(
const data = action.payload; const data = action.payload;
draft.userList = data || []; draft.userList = data || [];
}) })
)
// 사용자 상세
.handleAction(Actions.USER_DETAIL.success, (state, action) =>
produce(state, draft => {
const data = action.payload;
draft.userDetail = { ...state.userDetail, ...data };
})
)
// 유저 상세 초기화
.handleAction(Actions.USER_DETAIL_INITAL, (state, action) =>
produce(state, draft => {
draft.userDetail = initalState.userDetail;
})
); );

95
src/modules/cstmrService/inquiry/sagas/index.ts

@ -120,8 +120,7 @@ function* adminDeleteSaga(
action: ActionType<typeof Actions.ADMIN_DELETE.request> action: ActionType<typeof Actions.ADMIN_DELETE.request>
) { ) {
try { try {
const { category, anserStatus, createUserNm, qnaSno, role } = const { category, anserStatus, createUserNm, qnaSno } = action.payload;
action.payload;
const res = yield call(Apis.qnaAPI.adminDelete, qnaSno); const res = yield call(Apis.qnaAPI.adminDelete, qnaSno);
const { errorCode, data } = res; const { errorCode, data } = res;
@ -150,15 +149,9 @@ function* adminDeleteSaga(
); );
} }
if (role === 'user') { yield put(
yield put( Actions.ADMIN_LIST.request({ category, anserStatus, createUserNm })
Actions.USER_LIST.request({ category: '', searchType: '', word: '' }) );
);
} else {
yield put(
Actions.ADMIN_LIST.request({ category, anserStatus, createUserNm })
);
}
} catch (error) { } catch (error) {
yield put(Actions.ADMIN_DELETE.failure(error)); yield put(Actions.ADMIN_DELETE.failure(error));
} }
@ -228,12 +221,39 @@ function* userInquirySaga(
} }
} }
function* userInquiryUpdateSaga( function* userDetailSaga(
action: ActionType<typeof Actions.USER_INQUIRY_UPDATE.request> action: ActionType<typeof Actions.USER_DETAIL.request>
) { ) {
try { try {
const payload = action.payload; const payload = action.payload;
const res = yield call(Apis.qnaAPI.userInquiryUpdate, payload); const res = yield call(Apis.qnaAPI.userDetail, payload);
const { data, errorCode } = res;
if (errorCode) {
// 오류메시지 호출
yield put(
MessageActions.IS_ERROR({
errorCode: errorCode,
errorMessage: '처리중 오류가 발생하였습니다',
isHistoryBack: false,
isRefresh: false
})
);
return;
}
yield put(Actions.USER_DETAIL.success(data));
} catch (error) {
yield put(Actions.USER_DETAIL.failure(error));
}
}
function* userUpdateSaga(
action: ActionType<typeof Actions.USER_UPDATE.request>
) {
try {
const payload = action.payload;
const res = yield call(Apis.qnaAPI.userUpdate, payload);
const { errorCode, data } = res; const { errorCode, data } = res;
if (errorCode) { if (errorCode) {
@ -263,7 +283,48 @@ function* userInquiryUpdateSaga(
); );
// yield put(Actions.USER_INQUIRY_UPDATE.success(data)); // yield put(Actions.USER_INQUIRY_UPDATE.success(data));
} catch (error) { } catch (error) {
yield put(Actions.USER_INQUIRY_UPDATE.failure(error)); yield put(Actions.USER_UPDATE.failure(error));
}
}
function* userDeleteSaga(
action: ActionType<typeof Actions.USER_DELETE.request>
) {
try {
const { qnaSno } = action.payload;
const res = yield call(Apis.qnaAPI.adminDelete, qnaSno);
const { errorCode, data } = res;
if (errorCode) {
// 오류메시지 호출
yield put(
MessageActions.IS_ERROR({
errorCode: errorCode,
errorMessage: '처리중 오류가 발생하였습니다',
isHistoryBack: false,
isRefresh: false
})
);
return;
}
if (data) {
yield put(
MessageActions.IS_MESSAGE({
messageCode: DELETE_MESSAGE.code,
message: DELETE_MESSAGE.message,
isHistoryBack: false,
isRefresh: false
})
);
}
yield put(
Actions.USER_LIST.request({ category: '', searchType: '', word: '' })
);
} catch (error) {
yield put(Actions.USER_DELETE.failure(error));
} }
} }
@ -275,5 +336,7 @@ export function* qnaSaga() {
yield takeEvery(Actions.ADMIN_DELETE.request, adminDeleteSaga); yield takeEvery(Actions.ADMIN_DELETE.request, adminDeleteSaga);
yield takeEvery(Actions.USER_LIST.request, userListSaga); yield takeEvery(Actions.USER_LIST.request, userListSaga);
yield takeEvery(Actions.USER_INQUIRY.request, userInquirySaga); yield takeEvery(Actions.USER_INQUIRY.request, userInquirySaga);
yield takeEvery(Actions.USER_INQUIRY_UPDATE.request, userInquiryUpdateSaga); yield takeEvery(Actions.USER_DETAIL.request, userDetailSaga);
yield takeEvery(Actions.USER_UPDATE.request, userUpdateSaga);
yield takeEvery(Actions.USER_DELETE.request, userDeleteSaga);
} }

Loading…
Cancel
Save