billing and paymetn methods

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-07 04:28:46 +00:00
parent 31c06d032c
commit 4e764e208d
11 changed files with 1010 additions and 349 deletions

View File

@@ -162,12 +162,13 @@ export interface TeamMember {
export interface PaymentMethod {
id: string;
type: 'stripe' | 'paypal' | 'bank_transfer' | 'local_wallet';
type: 'stripe' | 'paypal' | 'bank_transfer' | 'local_wallet' | 'manual';
display_name: string;
name?: string;
is_enabled: boolean;
is_default?: boolean;
instructions?: string;
country_code?: string;
bank_details?: {
bank_name?: string;
account_number?: string;
@@ -297,6 +298,90 @@ export async function getAdminPayments(params?: { status?: string; account_id?:
return fetchAPI(url);
}
// Admin payment method configs (country-level)
export interface PaymentMethodConfig {
id: number;
country_code: string;
payment_method: PaymentMethod['type'];
display_name: string;
is_enabled: boolean;
instructions?: string;
sort_order?: number;
}
export async function getAdminPaymentMethodConfigs(params?: { country_code?: string; payment_method?: string }): Promise<{
results: PaymentMethodConfig[];
count: number;
}> {
const queryParams = new URLSearchParams();
if (params?.country_code) queryParams.append('country_code', params.country_code);
if (params?.payment_method) queryParams.append('payment_method', params.payment_method);
const url = `/v1/admin/billing/payment-method-configs/${queryParams.toString() ? '?' + queryParams.toString() : ''}`;
return fetchAPI(url);
}
export async function createAdminPaymentMethodConfig(data: Partial<PaymentMethodConfig>): Promise<PaymentMethodConfig> {
return fetchAPI('/v1/admin/billing/payment-method-configs/', {
method: 'POST',
body: JSON.stringify(data),
});
}
export async function updateAdminPaymentMethodConfig(id: number, data: Partial<PaymentMethodConfig>): Promise<PaymentMethodConfig> {
return fetchAPI(`/v1/admin/billing/payment-method-configs/${id}/`, {
method: 'PATCH',
body: JSON.stringify(data),
});
}
export async function deleteAdminPaymentMethodConfig(id: number): Promise<void> {
await fetchAPI(`/v1/admin/billing/payment-method-configs/${id}/`, {
method: 'DELETE',
});
}
// Admin account payment methods (cross-account)
export interface AdminAccountPaymentMethod extends PaymentMethod {
account: number;
metadata?: Record<string, any>;
}
export async function getAdminAccountPaymentMethods(params?: { account_id?: number }): Promise<{
results: AdminAccountPaymentMethod[];
count: number;
}> {
const queryParams = new URLSearchParams();
if (params?.account_id) queryParams.append('account_id', String(params.account_id));
const url = `/v1/admin/billing/account-payment-methods/${queryParams.toString() ? '?' + queryParams.toString() : ''}`;
return fetchAPI(url);
}
export async function createAdminAccountPaymentMethod(data: Partial<AdminAccountPaymentMethod>): Promise<AdminAccountPaymentMethod> {
return fetchAPI('/v1/admin/billing/account-payment-methods/', {
method: 'POST',
body: JSON.stringify(data),
});
}
export async function updateAdminAccountPaymentMethod(id: number | string, data: Partial<AdminAccountPaymentMethod>): Promise<AdminAccountPaymentMethod> {
return fetchAPI(`/v1/admin/billing/account-payment-methods/${id}/`, {
method: 'PATCH',
body: JSON.stringify(data),
});
}
export async function deleteAdminAccountPaymentMethod(id: number | string): Promise<void> {
await fetchAPI(`/v1/admin/billing/account-payment-methods/${id}/`, {
method: 'DELETE',
});
}
export async function setAdminDefaultAccountPaymentMethod(id: number | string): Promise<{ message: string; id: number | string }> {
return fetchAPI(`/v1/admin/billing/account-payment-methods/${id}/set_default/`, {
method: 'POST',
});
}
export async function getAdminUsers(params?: {
search?: string;
role?: string;