/** * 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; } ): Promise> { const { data } = await apiClient.get>('/admin/subscriptions', { params: { page, page_size: pageSize, ...filters, }, }); 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;