mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-05-05 13:40:44 +08:00
109 lines
2.5 KiB
TypeScript
109 lines
2.5 KiB
TypeScript
|
|
/**
|
||
|
|
* 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<PaginatedResponse<AffiliateAdminEntry>> {
|
||
|
|
const { data } = await apiClient.get<PaginatedResponse<AffiliateAdminEntry>>(
|
||
|
|
'/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<SimpleUser[]> {
|
||
|
|
const { data } = await apiClient.get<SimpleUser[]>(
|
||
|
|
'/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
|