/** * Admin Affiliate API endpoints * Manage per-user affiliate (邀请返利) configurations: * exclusive invite codes (overrides aff_code) and exclusive rebate rates. */ import { apiClient } from '../client' import type { PaginatedResponse } from '@/types' export interface AffiliateAdminEntry { user_id: number email: string username: string aff_code: string aff_code_custom: boolean aff_rebate_rate_percent?: number | null aff_count: number } export interface ListAffiliateUsersParams { page?: number page_size?: number search?: string } export interface UpdateAffiliateUserRequest { aff_code?: string aff_rebate_rate_percent?: number | null /** Set true to explicitly clear the per-user rate (sets it to NULL). */ clear_rebate_rate?: boolean } export interface BatchSetRateRequest { user_ids: number[] aff_rebate_rate_percent?: number | null /** Set true to clear rates instead of setting. */ clear?: boolean } export interface SimpleUser { id: number email: string username: string } export async function listUsers( params: ListAffiliateUsersParams = {}, ): Promise> { const { data } = await apiClient.get>( '/admin/affiliates/users', { params: { page: params.page ?? 1, page_size: params.page_size ?? 20, search: params.search ?? '', }, }, ) return data } export async function lookupUsers(q: string): Promise { const { data } = await apiClient.get( '/admin/affiliates/users/lookup', { params: { q } }, ) return data } export async function updateUserSettings( userId: number, payload: UpdateAffiliateUserRequest, ): Promise<{ user_id: number }> { const { data } = await apiClient.put<{ user_id: number }>( `/admin/affiliates/users/${userId}`, payload, ) return data } export async function clearUserSettings( userId: number, ): Promise<{ user_id: number }> { const { data } = await apiClient.delete<{ user_id: number }>( `/admin/affiliates/users/${userId}`, ) return data } export async function batchSetRate( payload: BatchSetRateRequest, ): Promise<{ affected: number }> { const { data } = await apiClient.post<{ affected: number }>( '/admin/affiliates/users/batch-rate', payload, ) return data } export const affiliatesAPI = { listUsers, lookupUsers, updateUserSettings, clearUserSettings, batchSetRate, } export default affiliatesAPI