Files
boursecu_admin/src/api/pargar.ts
T
2026-07-22 00:10:29 +03:30

140 lines
3.6 KiB
TypeScript

import useAxios from '@core/utils/useAxios'
import type { TableInput } from '@core/type/baseTable'
export interface PargarRecord {
id: number
customer_id?: number
amount?: number
desc?: string
type?: string
sync_status?: 'pending' | 'success' | 'failed'
sync_log?: string | null
pargar_ref?: string | null
data?: string | null
res?: string | null
created_at?: string
customer?: {
id?: number
name?: string
mobile?: string
pargar_account_id?: string | number | null
}
}
export const getPargarTable = async (params: TableInput) =>
await useAxios.post<PargarRecord[]>('/admin/pargar/table', params)
export const getPargarDetail = async (id: number) =>
await useAxios.get<PargarRecord>(`/admin/pargar/${id}`)
export const retryPargarSanad = async (id: number) =>
await useAxios.post<{ ok: boolean; message: string; pargar?: PargarRecord }>(`/admin/pargar/${id}/retry`)
export const registerCustomerInPargar = async (customerId: number) =>
await useAxios.post<{ ok: boolean; message: string; pargar_account_id?: string | number }>(
`/admin/customer/${customerId}/pargar/register`
)
export interface PargarSyncWalletResult {
ok: boolean
message: string
result?: {
documents: {
applied: number
skipped: number
batches?: number
acknowledged?: number
errors: string[]
}
mande: { applied: boolean; gold_delta?: number; rial_delta?: number; message: string }
}
}
export const syncCustomerWalletFromPargar = async (customerId: number, force = false) =>
await useAxios.post<PargarSyncWalletResult>(
`/admin/customer/${customerId}/pargar/sync-wallet`,
{ force }
)
export interface PargarBulkWalletSyncChunk {
ok: boolean
message: string
total: number
offset: number
processed: number
next_offset: number
done: boolean
success: number
changed: number
failed: number
errors: { id: number; name: string; mobile?: string; error: string }[]
}
/** یک دسته از همگام‌سازی ماندهٔ همهٔ مشتریان دارای کد پرگار */
export const syncAllWalletsFromPargarChunk = async (params?: {
offset?: number
limit?: number
force?: boolean
}) =>
await useAxios.post<PargarBulkWalletSyncChunk>('/admin/pargar/wallet-sync/all', {
offset: params?.offset ?? 0,
limit: params?.limit ?? 20,
force: params?.force ?? false,
})
export interface PanelOnlyCustomer {
id: number
name: string
mobile: string
created_at: string
}
export interface PargarOnlyCustomer {
code: number
name: string
tel: string
gid: number | null
group: string
}
export interface CustomerSyncStatus {
panel_total: number
panel_registered: number
panel_only: number
pargar_total: number
pargar_only_count: number
panel_only_list: {
data: PanelOnlyCustomer[]
current_page: number
last_page: number
total: number
}
pargar_only_list: {
data: PargarOnlyCustomer[]
current_page: number
last_page: number
total: number
}
}
export const getCustomerSyncStatus = async (params?: {
search?: string
page?: number
pargar_page?: number
}) => await useAxios.get<CustomerSyncStatus>('/admin/pargar/customer-sync/status', { params })
export interface SyncPanelResult {
ok: boolean
success: number
failed: number
errors: { name: string; mobile: string; error: string }[]
}
export const syncPanelToPargar = async () =>
await useAxios.post<SyncPanelResult>('/admin/pargar/customer-sync/panel-to-pargar')
export const importFromPargar = async (customers: PargarOnlyCustomer[]) =>
await useAxios.post<SyncPanelResult>('/admin/pargar/customer-sync/import-from-pargar', {
customers,
})