Refactor API structure and integrate new modular API client
- Replaced legacy apiService with a new modular api client structure. - Updated AuthContext, OAuthButtons, and AuthCallbackPage to use the new api client. - Created separate services for auth, sounds, playlists, and users. - Implemented centralized API configuration and error handling. - Added support for OAuth providers and token exchange. - Introduced a Toaster component for notifications in App. - Updated API endpoints and request handling for better maintainability.
This commit is contained in:
94
src/lib/api/services/playlists.ts
Normal file
94
src/lib/api/services/playlists.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import { apiClient } from '../client'
|
||||
import { API_CONFIG } from '../config'
|
||||
import type { PaginatedResponse } from '../types'
|
||||
import type { Sound } from './sounds'
|
||||
|
||||
export interface Playlist {
|
||||
id: number
|
||||
name: string
|
||||
description?: string
|
||||
user_id: number
|
||||
is_public: boolean
|
||||
sounds: Sound[]
|
||||
created_at: string
|
||||
updated_at: string
|
||||
}
|
||||
|
||||
export interface CreatePlaylistRequest {
|
||||
name: string
|
||||
description?: string
|
||||
is_public?: boolean
|
||||
}
|
||||
|
||||
export interface UpdatePlaylistRequest {
|
||||
name?: string
|
||||
description?: string
|
||||
is_public?: boolean
|
||||
}
|
||||
|
||||
export interface PlaylistsListParams {
|
||||
page?: number
|
||||
size?: number
|
||||
search?: string
|
||||
user_id?: number
|
||||
is_public?: boolean
|
||||
}
|
||||
|
||||
export interface AddSoundToPlaylistRequest {
|
||||
sound_id: number
|
||||
}
|
||||
|
||||
export class PlaylistsService {
|
||||
/**
|
||||
* Get list of playlists with pagination
|
||||
*/
|
||||
async list(params?: PlaylistsListParams): Promise<PaginatedResponse<Playlist>> {
|
||||
return apiClient.get<PaginatedResponse<Playlist>>(API_CONFIG.ENDPOINTS.PLAYLISTS.LIST, {
|
||||
params: params as Record<string, string | number | boolean | undefined>
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a specific playlist by ID
|
||||
*/
|
||||
async get(id: string | number): Promise<Playlist> {
|
||||
return apiClient.get<Playlist>(API_CONFIG.ENDPOINTS.PLAYLISTS.GET(id))
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new playlist
|
||||
*/
|
||||
async create(data: CreatePlaylistRequest): Promise<Playlist> {
|
||||
return apiClient.post<Playlist>(API_CONFIG.ENDPOINTS.PLAYLISTS.CREATE, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing playlist
|
||||
*/
|
||||
async update(id: string | number, data: UpdatePlaylistRequest): Promise<Playlist> {
|
||||
return apiClient.patch<Playlist>(API_CONFIG.ENDPOINTS.PLAYLISTS.UPDATE(id), data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a playlist
|
||||
*/
|
||||
async delete(id: string | number): Promise<void> {
|
||||
return apiClient.delete<void>(API_CONFIG.ENDPOINTS.PLAYLISTS.DELETE(id))
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a sound to a playlist
|
||||
*/
|
||||
async addSound(playlistId: string | number, data: AddSoundToPlaylistRequest): Promise<Playlist> {
|
||||
return apiClient.post<Playlist>(`${API_CONFIG.ENDPOINTS.PLAYLISTS.GET(playlistId)}/sounds`, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a sound from a playlist
|
||||
*/
|
||||
async removeSound(playlistId: string | number, soundId: string | number): Promise<Playlist> {
|
||||
return apiClient.delete<Playlist>(`${API_CONFIG.ENDPOINTS.PLAYLISTS.GET(playlistId)}/sounds/${soundId}`)
|
||||
}
|
||||
}
|
||||
|
||||
export const playlistsService = new PlaylistsService()
|
||||
Reference in New Issue
Block a user