96 lines
3.0 KiB
TypeScript
96 lines
3.0 KiB
TypeScript
import { apiClient, unwrapData } from '@/shared/api/client'
|
|
import type { ApiResponse } from '@/shared/api/types'
|
|
import type {
|
|
CreatePaymentAccountPayload,
|
|
CreateWithdrawalPayload,
|
|
PaymentAccount,
|
|
PaymentAccountPage,
|
|
UpdatePaymentAccountPayload,
|
|
WalletAccount,
|
|
WalletLedger,
|
|
WalletLedgerPage,
|
|
WithdrawalPage,
|
|
WithdrawalRecord,
|
|
} from '@/features/wallet/types'
|
|
|
|
export const WALLET_PAGE_SIZE = 20
|
|
|
|
export function fetchWalletBalance() {
|
|
return unwrapData<WalletAccount>(apiClient.get<ApiResponse<WalletAccount>>('/wallet/balance'))
|
|
}
|
|
|
|
export function fetchWalletLedger(page = 1, pageSize = WALLET_PAGE_SIZE) {
|
|
return unwrapData<Partial<WalletLedgerPage>>(
|
|
apiClient.get<ApiResponse<Partial<WalletLedgerPage>>>('/wallet/ledger', {
|
|
params: { page, page_size: pageSize },
|
|
})
|
|
).then(data => ({
|
|
items: (data.items ?? []) as WalletLedger[],
|
|
total: data.total ?? 0,
|
|
page: data.page ?? page,
|
|
page_size: data.page_size ?? pageSize,
|
|
}))
|
|
}
|
|
|
|
export function fetchPaymentAccounts(page = 1, pageSize = WALLET_PAGE_SIZE) {
|
|
return unwrapData<Partial<PaymentAccountPage>>(
|
|
apiClient.get<ApiResponse<Partial<PaymentAccountPage>>>('/payment-accounts', {
|
|
params: { page, page_size: pageSize },
|
|
})
|
|
).then(data => ({
|
|
items: (data.items ?? []) as PaymentAccount[],
|
|
total: data.total ?? 0,
|
|
page: data.page ?? page,
|
|
page_size: data.page_size ?? pageSize,
|
|
}))
|
|
}
|
|
|
|
export function createPaymentAccount(payload: CreatePaymentAccountPayload) {
|
|
return unwrapData<PaymentAccount>(
|
|
apiClient.post<ApiResponse<PaymentAccount>>('/payment-accounts', payload)
|
|
)
|
|
}
|
|
|
|
export function updatePaymentAccount(id: number, payload: UpdatePaymentAccountPayload) {
|
|
return unwrapData<PaymentAccount>(
|
|
apiClient.put<ApiResponse<PaymentAccount>>(`/payment-accounts/${id}`, payload)
|
|
)
|
|
}
|
|
|
|
export function deletePaymentAccount(id: number) {
|
|
return unwrapData<{ deleted: boolean }>(
|
|
apiClient.delete<ApiResponse<{ deleted: boolean }>>(`/payment-accounts/${id}`)
|
|
)
|
|
}
|
|
|
|
export function setDefaultPaymentAccount(id: number) {
|
|
return unwrapData<{ updated: boolean }>(
|
|
apiClient.post<ApiResponse<{ updated: boolean }>>(`/payment-accounts/${id}/set-default`)
|
|
)
|
|
}
|
|
|
|
export function fetchWithdrawals(page = 1, pageSize = WALLET_PAGE_SIZE) {
|
|
return unwrapData<Partial<WithdrawalPage>>(
|
|
apiClient.get<ApiResponse<Partial<WithdrawalPage>>>('/withdrawals', {
|
|
params: { page, page_size: pageSize },
|
|
})
|
|
).then(data => ({
|
|
items: (data.items ?? []) as WithdrawalRecord[],
|
|
total: data.total ?? 0,
|
|
page: data.page ?? page,
|
|
page_size: data.page_size ?? pageSize,
|
|
}))
|
|
}
|
|
|
|
export function createWithdrawal(payload: CreateWithdrawalPayload) {
|
|
return unwrapData<WithdrawalRecord>(
|
|
apiClient.post<ApiResponse<WithdrawalRecord>>('/withdrawals', payload)
|
|
)
|
|
}
|
|
|
|
export function cancelWithdrawal(id: number) {
|
|
return unwrapData<{ cancelled: boolean }>(
|
|
apiClient.post<ApiResponse<{ cancelled: boolean }>>(`/withdrawals/${id}/cancel`)
|
|
)
|
|
}
|