부가서비스

- SMS결제통보_재발송 API 추가
This commit is contained in:
HyeonJongKim
2025-09-25 10:03:23 +09:00
parent 38f40264cd
commit d824528336
6 changed files with 51 additions and 72 deletions

View File

@@ -1,29 +0,0 @@
import axios from 'axios';
import { API_URL_ADDITIONAL_SERVICE } from '@/shared/api/api-url-additional-service';
import { resultify } from '@/shared/lib/resultify';
import { CBDCAxiosError } from '@/shared/@types/error';
import {
ExtensionSmsDetailParams,
ExtensionSmsDetailResponse
} from '../../model/sms-payment/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const extensionSmsDetail = (params: ExtensionSmsDetailParams) => {
return resultify(
axios.post<ExtensionSmsDetailResponse>(API_URL_ADDITIONAL_SERVICE.extensionSmsDetail(), params),
);
};
export const useExtensionSmsDetailMutation = (options?: UseMutationOptions<ExtensionSmsDetailResponse, CBDCAxiosError, ExtensionSmsDetailParams>) => {
const mutation = useMutation<ExtensionSmsDetailResponse, CBDCAxiosError, ExtensionSmsDetailParams>({
...options,
mutationFn: (params: ExtensionSmsDetailParams) => extensionSmsDetail(params),
});
return {
...mutation,
};
};

View File

@@ -1,29 +0,0 @@
import axios from 'axios';
import { API_URL_ADDITIONAL_SERVICE } from '@/shared/api/api-url-additional-service';
import { resultify } from '@/shared/lib/resultify';
import { CBDCAxiosError } from '@/shared/@types/error';
import {
ExtensionSmsResendParams,
ExtensionSmsResendResponse
} from '../../model/sms-payment/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const extensionSmsResend = (params: ExtensionSmsResendParams) => {
return resultify(
axios.post<ExtensionSmsResendResponse>(API_URL_ADDITIONAL_SERVICE.extensionSmsResend(), params),
);
};
export const useExtensionSmsResendMutation = (options?: UseMutationOptions<ExtensionSmsResendResponse, CBDCAxiosError, ExtensionSmsResendParams>) => {
const mutation = useMutation<ExtensionSmsResendResponse, CBDCAxiosError, ExtensionSmsResendParams>({
...options,
mutationFn: (params: ExtensionSmsResendParams) => extensionSmsResend(params),
});
return {
...mutation,
};
};

View File

@@ -90,4 +90,6 @@ export interface SmsPaymentDetailResendProps {
bottomSmsPaymentDetailResendOn: boolean;
setBottomSmsPaymentDetailResendOn: (bottomSmsPaymentDetailResendOn: boolean) => void;
smsDetailData: ExtensionSmsDetailResponse | null;
mid: string;
tid: string;
}

View File

@@ -1,17 +1,47 @@
import { motion } from 'framer-motion';
import { IMAGE_ROOT } from '@/shared/constants/common';
import { SmsPaymentDetailResendProps } from '../../../additional-service/model/sms-payment/types';
import { useExtensionSmsResendMutation } from '../../api/sms-payment/use-extension-sms-resend-mutation';
import appBridge from '@/shared/lib/appBridge';
export const SmsPaymentDetailResend = ({
bottomSmsPaymentDetailResendOn,
setBottomSmsPaymentDetailResendOn,
smsDetailData
smsDetailData,
mid,
tid
}: SmsPaymentDetailResendProps) => {
const variants = {
hidden: { y: '100%' },
visible: { y: '0%' },
};
const {mutateAsync : resendMessage } = useExtensionSmsResendMutation();
const onClickResend = () => {
// sendMessage가 없으면 재발송 불가
if (!smsDetailData?.sendMessage) {
return;
}
resendMessage({
mid: mid,
tid: tid
}).then((rs) => {
console.log("Resend 성공: ", rs);
appBridge.showToast("SMS 발송을 성공하였습니다.");
setBottomSmsPaymentDetailResendOn(false);
}).catch((error) => {
console.error("Resend 실패: ", error);
// 실패 토스트 메시지 표시
const errorMessage = error?.message || "알 수 없는 오류";
const failMessage = `[실패] ${errorMessage}`;
appBridge.showToast(failMessage);
});
}
const onClickToClose = () => {
// close
setBottomSmsPaymentDetailResendOn(false);
@@ -52,7 +82,14 @@ export const SmsPaymentDetailResend = ({
<p className="resend-text">{smsDetailData?.sendMessage || '-'}</p>
</div>
<div className="bottomsheet-footer">
<button className="btn-50 btn-blue flex-1" type="button"></button>
<button
className={`btn-50 flex-1 ${smsDetailData?.sendMessage ? 'btn-blue' : 'btn-gray'}`}
type="button"
onClick={onClickResend}
disabled={!smsDetailData?.sendMessage}
>
</button>
</div>
</motion.div>
</>

View File

@@ -59,8 +59,8 @@ export const SmsPaymentFilter = ({
let smsTypeOption = [
{ name: '전체', value: SmsType.ALL },
{ name: '가상계좌요청', value: SmsType.VACCOUNT_REQ },
{ name: '가상계좌 요청+입금', value: SmsType.VACCOUNT_REQ_DEPOSIT },
{ name: '가상계좌\n요청', value: SmsType.VACCOUNT_REQ },
{ name: '가상계좌\n요청+입금', value: SmsType.VACCOUNT_REQ_DEPOSIT },
]
const onClickToClose = () => {

View File

@@ -27,7 +27,8 @@ export const SmsPaymentPage = () => {
const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM);
const [filterOn, setFilterOn] = useState<boolean>(false);
const [mid, setMid] = useState<string>('nictest001m');
const [tid, setTid] = useState<string>('');
const [selectedTid, setSelectedTid] = useState<string>('');
const [selectedMid, setSelectedMid] = useState<string>('');
const [searchCl, setSearchCl] = useState<SmsPaymentSearchType>(SmsPaymentSearchType.BUYER_NAME)
const [searchValue, setSearchValue] = useState<string>('')
const [fromDate, setFromDate] = useState(moment().format('YYYY-MM-DD'));
@@ -107,20 +108,15 @@ export const SmsPaymentPage = () => {
});
}
const onClickToOpenFilter = () => {
setFilterOn(!filterOn);
};
const onClickToSort = (sort: SortByKeys) => {
setSortBy(sort);
callList({ sortBy: sort })
};
const onClickToShowDetail = (selectedMid: string, selectedTid: string) => {
setTid(selectedTid);
callDetail(selectedMid, selectedTid);
const onClickToShowDetail = (itemMid: string, itemTid: string) => {
setSelectedMid(itemMid);
setSelectedTid(itemTid);
callDetail(itemMid, itemTid);
setBottomSmsPaymentDetailResendOn(true);
};
@@ -179,6 +175,8 @@ export const SmsPaymentPage = () => {
bottomSmsPaymentDetailResendOn={bottomSmsPaymentDetailResendOn}
setBottomSmsPaymentDetailResendOn={setBottomSmsPaymentDetailResendOn}
smsDetailData={smsDetailData}
mid={selectedMid}
tid={selectedTid}
></SmsPaymentDetailResend>
<SmsPaymentFilter