217 lines
6.0 KiB
TypeScript
217 lines
6.0 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { useAuthToken } from "../hooks/use-root-data";
|
|
import { createWalletManagementApi, createApiApi } from "~/utils/api-client-factory";
|
|
|
|
export function useServiceGetWallet() {
|
|
const token = useAuthToken();
|
|
const response = useQuery({
|
|
enabled: !!token,
|
|
retry: 1,
|
|
retryDelay: 3000,
|
|
refetchOnWindowFocus: false,
|
|
queryKey: ["getWalletService"],
|
|
queryFn: async () => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
return await walletApi.apiWalletV1WalletList();
|
|
},
|
|
});
|
|
|
|
return { ...response };
|
|
}
|
|
|
|
export function useServiceCreatePayoutRequest() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (data: {
|
|
amount: string;
|
|
transaction_type: "deposit" | "purchase";
|
|
}) => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
const response = await walletApi.apiWalletV1ChargeCreate({
|
|
data: {
|
|
amount: data.amount,
|
|
transactionType: data.transaction_type,
|
|
},
|
|
});
|
|
return response;
|
|
},
|
|
onSuccess: (data) => {
|
|
console.log("Charge request response:", data);
|
|
queryClient.invalidateQueries({ queryKey: ["getWalletService"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
// Get seller balance
|
|
export function useServiceGetSellerBalance() {
|
|
const token = useAuthToken();
|
|
const response = useQuery({
|
|
enabled: !!token,
|
|
retry: 1,
|
|
retryDelay: 3000,
|
|
refetchOnWindowFocus: false,
|
|
queryKey: ["getSellerBalanceService"],
|
|
queryFn: async () => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
return await walletApi.apiWalletV1SellerBalanceRead();
|
|
},
|
|
});
|
|
|
|
return { ...response };
|
|
}
|
|
|
|
// Get payout requests list
|
|
export function useServiceGetPayoutRequests(filters?: {
|
|
dateFilter?: "today" | "last_7" | "last_30" | "custom";
|
|
fromDate?: string;
|
|
toDate?: string;
|
|
}) {
|
|
const token = useAuthToken();
|
|
const response = useQuery({
|
|
enabled: !!token,
|
|
retry: 1,
|
|
retryDelay: 3000,
|
|
refetchOnWindowFocus: false,
|
|
queryKey: ["getPayoutRequestsService", filters],
|
|
queryFn: async () => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
return await walletApi.apiWalletV1PayoutRequestList({
|
|
dateFilter: filters?.dateFilter,
|
|
fromDate: filters?.fromDate,
|
|
toDate: filters?.toDate,
|
|
});
|
|
},
|
|
});
|
|
|
|
return { ...response };
|
|
}
|
|
|
|
// Get bank accounts list
|
|
export function useServiceGetBankAccounts() {
|
|
const token = useAuthToken();
|
|
const response = useQuery({
|
|
enabled: !!token,
|
|
retry: 1,
|
|
retryDelay: 3000,
|
|
refetchOnWindowFocus: false,
|
|
queryKey: ["getBankAccountsService"],
|
|
queryFn: async () => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
return await walletApi.apiWalletV1BankAccountsListList();
|
|
},
|
|
});
|
|
|
|
return { ...response };
|
|
}
|
|
|
|
// Get financial report
|
|
export function useServiceGetReport(filters?: {
|
|
fromDate?: string;
|
|
toDate?: string;
|
|
}) {
|
|
const token = useAuthToken();
|
|
const response = useQuery({
|
|
enabled: !!token,
|
|
retry: 1,
|
|
retryDelay: 3000,
|
|
refetchOnWindowFocus: false,
|
|
queryKey: ["getReportService", filters],
|
|
queryFn: async () => {
|
|
const apiApi = createApiApi(token);
|
|
return await apiApi.apiWalletV1ReportList({
|
|
fromDate: filters?.fromDate,
|
|
toDate: filters?.toDate,
|
|
});
|
|
},
|
|
});
|
|
|
|
return { ...response };
|
|
}
|
|
|
|
// Create payout request (Cash money)
|
|
export function useServiceCreateCashRequest() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (data: { amount: string; bank_account: string }) => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
const response = await walletApi.apiWalletV1PayoutRequestCreateCreate({
|
|
data: {
|
|
amount: data.amount,
|
|
bankAccount: data.bank_account,
|
|
},
|
|
});
|
|
return response;
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ["getPayoutRequestsService"] });
|
|
queryClient.invalidateQueries({ queryKey: ["getSellerBalanceService"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
// Register bank account
|
|
export function useServiceRegisterBankAccount() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (data: { iban: string; cardNumber: string }) => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
const response = await walletApi.apiWalletV1BankAccountsCreate({
|
|
data: {
|
|
iban: data.iban,
|
|
cardNumber: data.cardNumber,
|
|
},
|
|
});
|
|
return response;
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ["getBankAccountsService"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
// Delete bank account
|
|
export function useServiceDeleteBankAccount() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (bankAccountId: string) => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
const response = await walletApi.apiWalletV1BankAccountsDelete({
|
|
id: bankAccountId,
|
|
});
|
|
return response;
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ["getBankAccountsService"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
// Verify Zarinpal payment
|
|
export function useServiceVerifyPayment() {
|
|
const token = useAuthToken();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (data: {
|
|
authority: string;
|
|
status: string;
|
|
authority_id: string;
|
|
}) => {
|
|
const walletApi = createWalletManagementApi(token);
|
|
const response = await walletApi.apiWalletV1VerifyList({
|
|
authority: data.authority,
|
|
status: data.status,
|
|
authorityId: data.authority_id,
|
|
});
|
|
return response;
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ["getWalletService"] });
|
|
queryClient.invalidateQueries({ queryKey: ["getSellerBalanceService"] });
|
|
},
|
|
});
|
|
}
|