Vitron-Front/app/requestHandler/use-wallet-hooks.tsx
2026-04-29 01:44:16 +03:30

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"] });
},
});
}