| |
| |
| |
| |
|
|
| import { apiClient } from '../client' |
| import type { |
| AdminGroup, |
| GroupPlatform, |
| CreateGroupRequest, |
| UpdateGroupRequest, |
| PaginatedResponse |
| } from '@/types' |
|
|
| |
| |
| |
| |
| |
| |
| |
| export async function list( |
| page: number = 1, |
| pageSize: number = 20, |
| filters?: { |
| platform?: GroupPlatform |
| status?: 'active' | 'inactive' |
| is_exclusive?: boolean |
| search?: string |
| }, |
| options?: { |
| signal?: AbortSignal |
| } |
| ): Promise<PaginatedResponse<AdminGroup>> { |
| const { data } = await apiClient.get<PaginatedResponse<AdminGroup>>('/admin/groups', { |
| params: { |
| page, |
| page_size: pageSize, |
| ...filters |
| }, |
| signal: options?.signal |
| }) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getAll(platform?: GroupPlatform): Promise<AdminGroup[]> { |
| const { data } = await apiClient.get<AdminGroup[]>('/admin/groups/all', { |
| params: platform ? { platform } : undefined |
| }) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getByPlatform(platform: GroupPlatform): Promise<AdminGroup[]> { |
| return getAll(platform) |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getById(id: number): Promise<AdminGroup> { |
| const { data } = await apiClient.get<AdminGroup>(`/admin/groups/${id}`) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function create(groupData: CreateGroupRequest): Promise<AdminGroup> { |
| const { data } = await apiClient.post<AdminGroup>('/admin/groups', groupData) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| |
| export async function update(id: number, updates: UpdateGroupRequest): Promise<AdminGroup> { |
| const { data } = await apiClient.put<AdminGroup>(`/admin/groups/${id}`, updates) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function deleteGroup(id: number): Promise<{ message: string }> { |
| const { data } = await apiClient.delete<{ message: string }>(`/admin/groups/${id}`) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| |
| export async function toggleStatus(id: number, status: 'active' | 'inactive'): Promise<AdminGroup> { |
| return update(id, { status }) |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getStats(id: number): Promise<{ |
| total_api_keys: number |
| active_api_keys: number |
| total_requests: number |
| total_cost: number |
| }> { |
| const { data } = await apiClient.get<{ |
| total_api_keys: number |
| active_api_keys: number |
| total_requests: number |
| total_cost: number |
| }>(`/admin/groups/${id}/stats`) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| export async function getGroupApiKeys( |
| id: number, |
| page: number = 1, |
| pageSize: number = 20 |
| ): Promise<PaginatedResponse<any>> { |
| const { data } = await apiClient.get<PaginatedResponse<any>>(`/admin/groups/${id}/api-keys`, { |
| params: { page, page_size: pageSize } |
| }) |
| return data |
| } |
|
|
| |
| |
| |
| export interface GroupRateMultiplierEntry { |
| user_id: number |
| user_name: string |
| user_email: string |
| user_notes: string |
| user_status: string |
| rate_multiplier: number |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getGroupRateMultipliers(id: number): Promise<GroupRateMultiplierEntry[]> { |
| const { data } = await apiClient.get<GroupRateMultiplierEntry[]>( |
| `/admin/groups/${id}/rate-multipliers` |
| ) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function updateSortOrder( |
| updates: Array<{ id: number; sort_order: number }> |
| ): Promise<{ message: string }> { |
| const { data } = await apiClient.put<{ message: string }>('/admin/groups/sort-order', { |
| updates |
| }) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function clearGroupRateMultipliers(id: number): Promise<{ message: string }> { |
| const { data } = await apiClient.delete<{ message: string }>(`/admin/groups/${id}/rate-multipliers`) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| |
| export async function batchSetGroupRateMultipliers( |
| id: number, |
| entries: Array<{ user_id: number; rate_multiplier: number }> |
| ): Promise<{ message: string }> { |
| const { data } = await apiClient.put<{ message: string }>( |
| `/admin/groups/${id}/rate-multipliers`, |
| { entries } |
| ) |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getUsageSummary( |
| timezone?: string |
| ): Promise<{ group_id: number; today_cost: number; total_cost: number }[]> { |
| const { data } = await apiClient.get< |
| { group_id: number; today_cost: number; total_cost: number }[] |
| >('/admin/groups/usage-summary', { |
| params: timezone ? { timezone } : undefined |
| }) |
| return data |
| } |
|
|
| |
| |
| |
| export async function getCapacitySummary(): Promise< |
| { group_id: number; concurrency_used: number; concurrency_max: number; sessions_used: number; sessions_max: number; rpm_used: number; rpm_max: number }[] |
| > { |
| const { data } = await apiClient.get< |
| { group_id: number; concurrency_used: number; concurrency_max: number; sessions_used: number; sessions_max: number; rpm_used: number; rpm_max: number }[] |
| >('/admin/groups/capacity-summary') |
| return data |
| } |
|
|
| export const groupsAPI = { |
| list, |
| getAll, |
| getByPlatform, |
| getById, |
| create, |
| update, |
| delete: deleteGroup, |
| toggleStatus, |
| getStats, |
| getGroupApiKeys, |
| getGroupRateMultipliers, |
| clearGroupRateMultipliers, |
| batchSetGroupRateMultipliers, |
| updateSortOrder, |
| getUsageSummary, |
| getCapacitySummary |
| } |
|
|
| export default groupsAPI |
|
|