feat: implement pagination for extractions and playlists with updated API responses

This commit is contained in:
JSC
2025-08-17 11:22:02 +02:00
parent 04401092bb
commit 75ecd26e06
5 changed files with 277 additions and 25 deletions

View File

@@ -22,6 +22,10 @@ export interface CreateExtractionResponse {
export interface GetExtractionsResponse {
extractions: ExtractionInfo[]
total: number
page: number
limit: number
total_pages: number
}
export type ExtractionSortField = 'title' | 'status' | 'service' | 'created_at' | 'updated_at'
@@ -33,6 +37,8 @@ export interface GetExtractionsParams {
sort_by?: ExtractionSortField
sort_order?: ExtractionSortOrder
status_filter?: ExtractionStatus
page?: number
limit?: number
}
export class ExtractionsService {
@@ -59,7 +65,7 @@ export class ExtractionsService {
/**
* Get all extractions
*/
async getAllExtractions(params?: GetExtractionsParams): Promise<ExtractionInfo[]> {
async getAllExtractions(params?: GetExtractionsParams): Promise<GetExtractionsResponse> {
const searchParams = new URLSearchParams()
if (params?.search) {
@@ -74,18 +80,24 @@ export class ExtractionsService {
if (params?.status_filter) {
searchParams.append('status_filter', params.status_filter)
}
if (params?.page) {
searchParams.append('page', params.page.toString())
}
if (params?.limit) {
searchParams.append('limit', params.limit.toString())
}
const queryString = searchParams.toString()
const url = queryString ? `/api/v1/extractions/?${queryString}` : '/api/v1/extractions/'
const response = await apiClient.get<GetExtractionsResponse>(url)
return response.extractions
return response
}
/**
* Get user's extractions
*/
async getUserExtractions(params?: GetExtractionsParams): Promise<ExtractionInfo[]> {
async getUserExtractions(params?: GetExtractionsParams): Promise<GetExtractionsResponse> {
const searchParams = new URLSearchParams()
if (params?.search) {
@@ -100,12 +112,18 @@ export class ExtractionsService {
if (params?.status_filter) {
searchParams.append('status_filter', params.status_filter)
}
if (params?.page) {
searchParams.append('page', params.page.toString())
}
if (params?.limit) {
searchParams.append('limit', params.limit.toString())
}
const queryString = searchParams.toString()
const url = queryString ? `/api/v1/extractions/user?${queryString}` : '/api/v1/extractions/user'
const response = await apiClient.get<GetExtractionsResponse>(url)
return response.extractions
return response
}
}