/** * Admin Subscriptions API endpoints * Handles user subscription management for administrators */ import { apiClient } from '../client' import type { UserSubscription, SubscriptionProgress, AssignSubscriptionRequest, BulkAssignSubscriptionRequest, ExtendSubscriptionRequest, PaginatedResponse } from '@/types' /** * List all subscriptions with pagination * @param page - Page number (default: 1) * @param pageSize - Items per page (default: 20) * @param filters - Optional filters (status, user_id, group_id) * @returns Paginated list of subscriptions */ export async function list( page: number = 1, pageSize: number = 20, filters?: { status?: 'active' | 'expired' | 'revoked' user_id?: number group_id?: number }, options?: { signal?: AbortSignal } ): Promise> { const { data } = await apiClient.get>( '/admin/subscriptions', { params: { page, page_size: pageSize, ...filters }, signal: options?.signal } ) return data } /** * Get subscription by ID * @param id - Subscription ID * @returns Subscription details */ export async function getById(id: number): Promise { const { data } = await apiClient.get(`/admin/subscriptions/${id}`) return data } /** * Get subscription progress * @param id - Subscription ID * @returns Subscription progress with usage stats */ export async function getProgress(id: number): Promise { const { data } = await apiClient.get(`/admin/subscriptions/${id}/progress`) return data } /** * Assign subscription to user * @param request - Assignment request * @returns Created subscription */ export async function assign(request: AssignSubscriptionRequest): Promise { const { data } = await apiClient.post('/admin/subscriptions/assign', request) return data } /** * Bulk assign subscriptions to multiple users * @param request - Bulk assignment request * @returns Created subscriptions */ export async function bulkAssign( request: BulkAssignSubscriptionRequest ): Promise { const { data } = await apiClient.post( '/admin/subscriptions/bulk-assign', request ) return data } /** * Extend subscription validity * @param id - Subscription ID * @param request - Extension request with days * @returns Updated subscription */ export async function extend( id: number, request: ExtendSubscriptionRequest ): Promise { const { data } = await apiClient.post( `/admin/subscriptions/${id}/extend`, request ) return data } /** * Revoke subscription * @param id - Subscription ID * @returns Success confirmation */ export async function revoke(id: number): Promise<{ message: string }> { const { data } = await apiClient.delete<{ message: string }>(`/admin/subscriptions/${id}`) return data } /** * List subscriptions by group * @param groupId - Group ID * @param page - Page number * @param pageSize - Items per page * @returns Paginated list of subscriptions in the group */ export async function listByGroup( groupId: number, page: number = 1, pageSize: number = 20 ): Promise> { const { data } = await apiClient.get>( `/admin/groups/${groupId}/subscriptions`, { params: { page, page_size: pageSize } } ) return data } /** * List subscriptions by user * @param userId - User ID * @param page - Page number * @param pageSize - Items per page * @returns Paginated list of user's subscriptions */ export async function listByUser( userId: number, page: number = 1, pageSize: number = 20 ): Promise> { const { data } = await apiClient.get>( `/admin/users/${userId}/subscriptions`, { params: { page, page_size: pageSize } } ) return data } export const subscriptionsAPI = { list, getById, getProgress, assign, bulkAssign, extend, revoke, listByGroup, listByUser } export default subscriptionsAPI