from fastapi import APIRouter, Query from contributor.connectors.apple_music import AppleArtist from contributor.connectors.spotify import SpotifyArtist from contributor.logic.service import apple_music, spotify router = APIRouter(prefix="/services", tags=["service"]) @router.get( path="/apple-music/artists/search", operation_id="search_apple_music_artists", response_model=list[AppleArtist], summary="Search Apple Music artists", description="Search for Apple Music artists matching a query string.", ) def search_apple_music_artists( query: str = Query(..., description="Term for search."), limit: int = Query(..., description="Max number of matched artists."), offset: int = Query(..., description="Offset from the beginning of the result."), localization: str | None = Query( default=..., description="Localization for the search." ), ) -> list[AppleArtist]: return apple_music.artist_search( query=query, limit=limit, offset=offset, localization=localization, ) @router.get( path="/apple-music/artists/{id}", operation_id="get_apple_music_artist_by_id", response_model=AppleArtist | None, summary="Get Apple Music artist by ID", description="Retrieve an Apple Music artist by their unique identifier.", ) def get_apple_music_artist_by_id(id: str) -> AppleArtist | None: return apple_music.get_artist_by_id(artist_id=id) @router.get( path="/spotify/artists/search", operation_id="search_spotify_artists", response_model=list[SpotifyArtist], summary="Search Spotify artists", description="Search for Spotify artists matching a query string.", ) async def search_spotify_artists( query: str = Query(..., description="The search query."), limit: int = Query(..., description="The number of items to return."), offset: int = Query(..., description="The index of the first item to return."), ) -> list[SpotifyArtist]: return await spotify.artist_search( query=query, limit=limit, offset=offset, ) @router.get( path="/spotify/artists/{id}", operation_id="get_spotify_artist_by_id", response_model=SpotifyArtist | None, summary="Get Spotify artist by ID", description="Retrieve a Spotify artist by their unique identifier.", ) async def get_spotify_artist_by_id(id: str) -> SpotifyArtist | None: return await spotify.get_artist_by_id(artist_id=id)