From 3897d3d54b0491370e7574209cb2417ad123b4af Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Tue, 16 Sep 2025 15:24:33 +0900 Subject: [PATCH] =?UTF-8?q?css=20=EC=88=98=EC=A0=95=20=ED=99=88=20api=20pa?= =?UTF-8?q?yment=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/api/use-home-banner-list-mutation.ts | 29 ++++ .../home/api/use-home-groups-mutation.ts | 29 ++++ .../home/api/use-home-month-mutation.ts | 29 ++++ .../home/api/use-home-notice-list-mutation.ts | 29 ++++ .../home/api/use-home-overview-mutation.ts | 29 ++++ .../home/api/use-home-today-mutation.ts | 29 ++++ src/entities/home/model/types.ts | 77 +++++++++- .../payment/api/use-payment-card-mutaion.ts | 29 ++++ .../use-payment-installment-detail-mutaion.ts | 29 ++++ .../api/use-payment-installment-mutaion.ts | 29 ++++ .../api/use-payment-non-card-mutation.ts | 29 ++++ .../use-payment-notification-data-mutaion.ts | 29 ++++ src/entities/payment/model/types.ts | 138 +++++++++++++++++- src/shared/api/api-url-payment.ts | 28 ++++ src/shared/ui/assets/css/style-fix.css | 5 +- 15 files changed, 564 insertions(+), 3 deletions(-) create mode 100644 src/entities/home/api/use-home-banner-list-mutation.ts create mode 100644 src/entities/home/api/use-home-groups-mutation.ts create mode 100644 src/entities/home/api/use-home-month-mutation.ts create mode 100644 src/entities/home/api/use-home-notice-list-mutation.ts create mode 100644 src/entities/home/api/use-home-overview-mutation.ts create mode 100644 src/entities/home/api/use-home-today-mutation.ts create mode 100644 src/entities/payment/api/use-payment-card-mutaion.ts create mode 100644 src/entities/payment/api/use-payment-installment-detail-mutaion.ts create mode 100644 src/entities/payment/api/use-payment-installment-mutaion.ts create mode 100644 src/entities/payment/api/use-payment-non-card-mutation.ts create mode 100644 src/entities/payment/api/use-payment-notification-data-mutaion.ts create mode 100644 src/shared/api/api-url-payment.ts diff --git a/src/entities/home/api/use-home-banner-list-mutation.ts b/src/entities/home/api/use-home-banner-list-mutation.ts new file mode 100644 index 0000000..5355ca4 --- /dev/null +++ b/src/entities/home/api/use-home-banner-list-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeBannerListParams, + HomeBannerListResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeBannerList = (params: HomeBannerListParams) => { + return resultify( + axios.post(API_URL_HOME.homeBannerList(), params), + ); +}; + +export const useHomeBannerListMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeBannerListParams) => homeBannerList(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/api/use-home-groups-mutation.ts b/src/entities/home/api/use-home-groups-mutation.ts new file mode 100644 index 0000000..37e0fcf --- /dev/null +++ b/src/entities/home/api/use-home-groups-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeGroupsParams, + HomeGroupsResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeGroups = (params: HomeGroupsParams) => { + return resultify( + axios.post(API_URL_HOME.homeGroups(), params), + ); +}; + +export const useHomeGroupsMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeGroupsParams) => homeGroups(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/api/use-home-month-mutation.ts b/src/entities/home/api/use-home-month-mutation.ts new file mode 100644 index 0000000..214629a --- /dev/null +++ b/src/entities/home/api/use-home-month-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeMonthParams, + HomeMonthResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeMonth = (params: HomeMonthParams) => { + return resultify( + axios.post(API_URL_HOME.homeMonth(), params), + ); +}; + +export const useHomeMonthwMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeMonthParams) => homeMonth(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/api/use-home-notice-list-mutation.ts b/src/entities/home/api/use-home-notice-list-mutation.ts new file mode 100644 index 0000000..41742a4 --- /dev/null +++ b/src/entities/home/api/use-home-notice-list-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeNoticeListParams, + HomeNoticeListResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeNoticeList = (params: HomeNoticeListParams) => { + return resultify( + axios.post(API_URL_HOME.homeBannerList(), params), + ); +}; + +export const useHomeBannerListMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeNoticeListParams) => homeNoticeList(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/api/use-home-overview-mutation.ts b/src/entities/home/api/use-home-overview-mutation.ts new file mode 100644 index 0000000..4c26d01 --- /dev/null +++ b/src/entities/home/api/use-home-overview-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeOverviewParams, + HomeOverviewResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeOverview = (params: HomeOverviewParams) => { + return resultify( + axios.post(API_URL_HOME.homeOverview(), params), + ); +}; + +export const useHomeOverviewMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeOverviewParams) => homeOverview(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/api/use-home-today-mutation.ts b/src/entities/home/api/use-home-today-mutation.ts new file mode 100644 index 0000000..723056f --- /dev/null +++ b/src/entities/home/api/use-home-today-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_HOME } from '@/shared/api/api-url-home'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + HomeTodayParams, + HomeTodayResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const homeToday = (params: HomeTodayParams) => { + return resultify( + axios.post(API_URL_HOME.homeToday(), params), + ); +}; + +export const useHomeTodayMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: HomeTodayParams) => homeToday(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/home/model/types.ts b/src/entities/home/model/types.ts index 8485928..b426ec7 100644 --- a/src/entities/home/model/types.ts +++ b/src/entities/home/model/types.ts @@ -1,3 +1,8 @@ +import { + NoticeListParams, + NoticeListResponse +} from '@/entities/support/model/types'; + export interface FavoriteItemProps { img?: string, text?: string @@ -9,4 +14,74 @@ export interface HomeBottomBannerProps { export interface AuthRegisterProps { setAuthRegisterOn: (authRegisterOn: boolean) => void; authRegisterOn: boolean; -}; \ No newline at end of file +}; + +export interface HomeCommonParams { + mid: string; + searchDate: string; +}; +export interface HomeTodayParams extends HomeCommonParams {}; +export interface HomeTodayResponse { + sales: Sales, + settlement: Settlement +}; +export interface Sales { + todayTotalAmount?: number; + yesterdayTotalAmount?: number; + totalCount?: number; + cancelCount?: number; + currentMonthAmount?: number; + previousMonthAmount?: number; +}; +export interface Settlement { + todaySettlementAmount: number; + totalCreditLimit: number; + availableCredit: number; + currentMonthSettlementAmount?: number; + previousMonthSettlementAmount?: number; +}; +export interface HomeOverviewParams extends HomeCommonParams {}; +export interface HomeOverviewResponse { + averageTransactionAmount: number; + dailyAverageSales: number; + dailyAverageCount: number; + topSalesDayInfo: TopSalesDayInfo; + topSalesTimeInfo: TopSalesTimeInfo; + topPaymentMethodInfo: TopPaymentMethodInfo; +}; +export interface TopSalesDayInfo { + daySalesRatios: Array; +}; +export interface TopSalesTimeInfo { + timeSalesRatios: Array; +}; +export interface TopPaymentMethodInfo { + paymentMethodRatios: Array; +}; +export interface DaySalesRatios { + dayOfWeek: string; + ratio: number; +}; +export interface TimeSalesRatios { + hour: string; + ratio: number; +}; +export interface PaymentMethodRatios { + paymentMethod: string; + ratio: number; +}; +export interface HomeNoticeListParams extends NoticeListParams {}; +export interface HomeNoticeListResponse extends NoticeListResponse {}; +export interface HomeMonthParams extends HomeCommonParams {}; +export interface HomeMonthResponse { + sales: Sales; + settlement: Settlement; +}; +export interface HomeGroupsParams { + userid: string; +}; +export interface HomeGroupsResponse { + mids: Array; +}; +export interface HomeBannerListParams {}; +export interface HomeBannerListResponse {}; \ No newline at end of file diff --git a/src/entities/payment/api/use-payment-card-mutaion.ts b/src/entities/payment/api/use-payment-card-mutaion.ts new file mode 100644 index 0000000..1e050c0 --- /dev/null +++ b/src/entities/payment/api/use-payment-card-mutaion.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_PAYMENT } from '@/shared/api/api-url-payment'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + PaymentCardParams, + PaymentCardResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const paymentCard = (params: PaymentCardParams) => { + return resultify( + axios.post(API_URL_PAYMENT.paymentCard(), params), + ); +}; + +export const usePaymentCardMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: PaymentCardParams) => paymentCard(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/payment/api/use-payment-installment-detail-mutaion.ts b/src/entities/payment/api/use-payment-installment-detail-mutaion.ts new file mode 100644 index 0000000..0bd7b80 --- /dev/null +++ b/src/entities/payment/api/use-payment-installment-detail-mutaion.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_PAYMENT } from '@/shared/api/api-url-payment'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + PaymentInstallmentDetailParams, + PaymentInstallmentDetailResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const paymentInstallmentDetail = (params: PaymentInstallmentDetailParams) => { + return resultify( + axios.post(API_URL_PAYMENT.paymentInstallmentDetail(), params), + ); +}; + +export const usePaymentInstallmentDetailMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: PaymentInstallmentDetailParams) => paymentInstallmentDetail(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/payment/api/use-payment-installment-mutaion.ts b/src/entities/payment/api/use-payment-installment-mutaion.ts new file mode 100644 index 0000000..93743bc --- /dev/null +++ b/src/entities/payment/api/use-payment-installment-mutaion.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_PAYMENT } from '@/shared/api/api-url-payment'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + PaymentInstallmentParams, + PaymentInstallmentResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const paymentInstallment = (params: PaymentInstallmentParams) => { + return resultify( + axios.post(API_URL_PAYMENT.paymentInstallment(), params), + ); +}; + +export const usePaymentInstallmentMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: PaymentInstallmentParams) => paymentInstallment(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/payment/api/use-payment-non-card-mutation.ts b/src/entities/payment/api/use-payment-non-card-mutation.ts new file mode 100644 index 0000000..f478ef8 --- /dev/null +++ b/src/entities/payment/api/use-payment-non-card-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_PAYMENT } from '@/shared/api/api-url-payment'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + PaymentNonCardParams, + PaymentNonCardResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const paymentNonCard = (params: PaymentNonCardParams) => { + return resultify( + axios.post(API_URL_PAYMENT.paymentNonCard(), params), + ); +}; + +export const usePaymentNonCardMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: PaymentNonCardParams) => paymentNonCard(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/payment/api/use-payment-notification-data-mutaion.ts b/src/entities/payment/api/use-payment-notification-data-mutaion.ts new file mode 100644 index 0000000..3bdac57 --- /dev/null +++ b/src/entities/payment/api/use-payment-notification-data-mutaion.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_PAYMENT } from '@/shared/api/api-url-payment'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + PaymentNotificationDataParams, + PaymentNotificationDataResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const paymentNotificationData = (params: PaymentNotificationDataParams) => { + return resultify( + axios.post(API_URL_PAYMENT.paymentnotificationData(), params), + ); +}; + +export const usePaymentNotificationDataMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: PaymentNotificationDataParams) => paymentNotificationData(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/payment/model/types.ts b/src/entities/payment/model/types.ts index 1386132..c547a9b 100644 --- a/src/entities/payment/model/types.ts +++ b/src/entities/payment/model/types.ts @@ -9,4 +9,140 @@ export interface InfoItemProps { payName?: string; payImage?: string; infoLink?: string; -}; \ No newline at end of file +}; + +export interface PaymentCommonParams { + mid: string; +}; +export interface PaymentNotificationDataParams extends PaymentCommonParams { + gid: string; +}; +export interface PaymentNotificationDataResponse { + merchantInfo: MerchantInfo; + creditCard: CreditCard; + accountTransfer: AccountTransfer; + virtualAccount: VirtualAccount; + mobilePayment: MobilePayment; + escrowPayment: EscrowPayment +}; +export interface MerchantInfo { + paymentInfoType: string; + mid: string; +}; +export interface CreditCard { + id: number; + paymentMethodName: string; + startDate: string; + adminEmail: string; + urlIp: string; + retransmissionInterval: string; + retransmissionCount: string; + okCheck: string; + encryptionStatus: string; + expandable: boolean; + detail: Record; +}; +export interface AccountTransfer { + id: number; + paymentMethodName: string; + startDate: string; + adminEmail: string; + urlIp: string; + retransmissionInterval: string; + retransmissionCount: string; + okCheck: string; + encryptionStatus: string; + expandable: boolean; + detail: Record; +}; +export interface VirtualAccount { + id: number; + paymentMethodName: string; + startDate: string; + adminEmail: string; + urlIp: string; + retransmissionInterval: string; + retransmissionCount: string; + okCheck: string; + encryptionStatus: string; + expandable: boolean; + detail: Record; +}; +export interface MobilePayment { + id: 1, + paymentMethodName: string; + startDate: string; + adminEmail: string; + urlIp: string; + retransmissionInterval: string; + retransmissionCount: string; + okCheck: string; + encryptionStatus: string; + expandable: boolean; + detail: Record; +}; +export interface EscrowPayment { + id: 1, + paymentMethodName: string; + startDate: string; + adminEmail: string; + urlIp: string; + retransmissionInterval: string; + retransmissionCount: string; + okCheck: string; + encryptionStatus: string; + expandable: boolean; + detail: Record; +}; +export interface PaymentNonCardParams extends PaymentCommonParams { + paymentMethod: string; +}; +export interface PaymentNonCardResponse { + settlementPeriod: string; + accountTransferData: AccountTransferData; + mobilePaymentData: MobilePaymentData; + otherPaymentData: OtherPaymentData; +}; +export interface AccountTransferData { + feeRanges: Array>; + bankFees: Array>; +}; +export interface MobilePaymentData { + paymentFees: Array>; + categoryFees: Array>; +}; +export interface OtherPaymentData { + feeRate: number; +}; +export interface PaymentInstallmentParams extends PaymentCommonParams { + paymentMethod: string; +}; +export interface PaymentInstallmentResponse { + installmentData: Array>; +}; +export interface PaymentInstallmentDetailParams extends PaymentCommonParams { + cardCompany: string; +}; +export interface PaymentInstallmentDetailResponse { + cardCompany: string; + cardCompanyOptions: Array; + installmentDetails: Array>; +}; +export interface PaymentCardParams extends PaymentCommonParams{ + paymentMethod: string; +}; +export interface PaymentCardResponse { + settlementPeriod: string; + generalTab: GeneralTab; + installmentTab: InstallmentTab; + moneyPointTab: MoneyPointTab; +}; +export interface GeneralTab { + items: Array>; +}; +export interface InstallmentTab { + items: Array>; +}; +export interface MoneyPointTab { + items: Array>; +}; diff --git a/src/shared/api/api-url-payment.ts b/src/shared/api/api-url-payment.ts new file mode 100644 index 0000000..01c1b3d --- /dev/null +++ b/src/shared/api/api-url-payment.ts @@ -0,0 +1,28 @@ +import { + API_BASE_URL, + API_URL_KEY, +} from './../constants/url'; + +/* Payment Management = 결제관리 API */ +export const API_URL_PAYMENT = { + paymentnotificationData: () => { + // POST: 결제데이터 통보 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/payment/notification/data`; + }, + paymentNonCard: () => { + // POST: 카드외 결제수단 수수료 및 정산주기 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/payment/non-card`; + }, + paymentInstallment: () => { + // POST: 가맹점 분담 무이자 정보 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/payment/installment`; + }, + paymentInstallmentDetail: () => { + // POST: 가맹점 분담 무이자 상세 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/payment/installment/detail`; + }, + paymentCard: () => { + // POST: 카드 결제수단 수수료 및 정산주기 조회 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/payment/card`; + }, +}; \ No newline at end of file diff --git a/src/shared/ui/assets/css/style-fix.css b/src/shared/ui/assets/css/style-fix.css index 2ec9714..e0b5c2d 100644 --- a/src/shared/ui/assets/css/style-fix.css +++ b/src/shared/ui/assets/css/style-fix.css @@ -51,7 +51,10 @@ main { padding-bottom: env(safe-area-inset-bottom) !important; } .bottomsheet{ - padding-bottom: env(safe-area-inset-bottom) !important; + padding-bottom: calc(26px + env(safe-area-inset-bottom)); +} +.bottomsheet.banner{ + padding-bottom: calc(0px + env(safe-area-inset-bottom)); } .apply-row.bottom-padding{ bottom: calc(70px + env(safe-area-inset-bottom)) !important;