Files
hfb_sys/frontend/src/features/admin/api/adminUsers.ts
T

167 lines
4.5 KiB
TypeScript

import { apiClient } from '@/shared/api/client'
import type { ApiResponse, PaginatedResult } from '@/shared/types/types'
import type { RealnameStatusValue, RiskStatus, UserStatus } from '@/shared/types/status'
export interface AdminUserItem {
id: number
phone: string
nickname: string
realname_status: RealnameStatusValue
risk_status: RiskStatus
credit_score: number
deposit_free_quota_cent: number
deposit_free_manual_quota_cent: number
deposit_free_level_quota_cent: number
deposit_free_effective_quota_cent: number
deposit_free_used_cent: number
deposit_free_remaining_cent: number
renter_growth_points: number
points_available: number
renter_growth_level: string
renter_growth_level_name: string
renter_growth_level_override: string
renter_growth_level_manual: boolean
available_balance_cent: number
frozen_balance_cent: number
quality_owner_status: 'none' | 'active' | string
quality_owner_deposit_cent: number
quality_owner_deposit_source: 'paid' | 'manual' | '' | string
quality_owner_activated_at?: string
status: UserStatus
order_count: number
listing_count: number
dispute_count: number
last_login_at?: string
created_at: string
updated_at: string
}
export interface AdminWalletAdjustPayload {
direction: 'in' | 'out'
amount_cent: number
reason: string
reference_no?: string
}
export interface AdminGrowthPointsAdjustPayload {
target_points: number
reason: string
}
export interface AdminGrowthLevelAdjustPayload {
target_level: string
reason: string
}
export interface AdminUserQuery {
keyword?: string
status?: '' | UserStatus
has_deposit_free_quota?: boolean
quality_owner_only?: boolean
}
export async function fetchAdminUsers(page = 1, pageSize = 20, query: AdminUserQuery = {}) {
const params: Record<string, unknown> = { page, page_size: pageSize }
if (query.keyword) params.keyword = query.keyword
if (query.status) params.status = query.status
if (query.has_deposit_free_quota) params.has_deposit_free_quota = true
if (query.quality_owner_only) params.quality_owner_only = true
const { data } = await apiClient.get<ApiResponse<PaginatedResult<AdminUserItem>>>(
'/admin/users',
{
params,
}
)
return data.data
}
export async function freezeAdminUser(id: number, reason: string) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(`/admin/users/${id}/freeze`, {
reason,
})
return data.data
}
export async function unfreezeAdminUser(id: number) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(`/admin/users/${id}/unfreeze`)
return data.data
}
export async function setAdminUserDepositFreeQuota(id: number, amountCent: number) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/deposit-free-quota`,
{ amount_cent: amountCent }
)
return data.data
}
export async function adjustAdminUserGrowthPoints(
id: number,
payload: AdminGrowthPointsAdjustPayload
) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/growth-points`,
payload
)
return data.data
}
export async function adjustAdminUserGrowthLevel(
id: number,
payload: AdminGrowthLevelAdjustPayload
) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/growth-level`,
payload
)
return data.data
}
export async function revokeAdminUserRealname(id: number, reason: string) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/revoke-realname`,
{ reason }
)
return data.data
}
export async function manualAdminUserRealname(
id: number,
payload: { name: string; idNo: string; reason: string }
) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/manual-realname`,
{
name: payload.name,
id_no: payload.idNo,
reason: payload.reason,
}
)
return data.data
}
export async function adjustAdminUserWallet(id: number, payload: AdminWalletAdjustPayload) {
const { data } = await apiClient.post<ApiResponse<AdminUserItem>>(
`/admin/users/${id}/wallet/adjust`,
{
direction: payload.direction,
amount_cent: payload.amount_cent,
reason: payload.reason,
reference_no: payload.reference_no || undefined,
}
)
return data.data
}
export async function setAdminUserQualityOwner(
id: number,
payload: { enabled: boolean; reason: string }
) {
const { data } = await apiClient.post<ApiResponse<unknown>>(
`/admin/users/${id}/quality-owner`,
payload
)
return data.data
}