Genre album/artists endpoints

This commit is contained in:
Antoine Gersant 2024-09-29 18:46:10 -07:00
parent 8d51344dc3
commit 143da76673
2 changed files with 32 additions and 4 deletions
src/server

View file

@ -61,6 +61,8 @@ pub fn router() -> Router<App> {
.route("/artists/:artists/albums/:name", get(get_album))
.route("/genres", get(get_genres))
.route("/genres/:genre", get(get_genre))
.route("/genres/:genre/albums", get(get_genre_albums))
.route("/genres/:genre/artists", get(get_genre_artists))
.route("/genres/:genre/songs", get(get_genre_songs))
.route("/random", get(get_random_albums)) // Deprecated
.route("/recent", get(get_recent_albums)) // Deprecated
@ -533,6 +535,36 @@ async fn get_genre(
Ok(Json(index_manager.get_genre(genre).await?.into()))
}
async fn get_genre_albums(
_auth: Auth,
State(index_manager): State<index::Manager>,
Path(genre): Path<String>,
) -> Result<Json<Vec<dto::AlbumHeader>>, APIError> {
let albums = index_manager
.get_genre(genre)
.await?
.albums
.into_iter()
.map(|a| a.into())
.collect();
Ok(Json(albums))
}
async fn get_genre_artists(
_auth: Auth,
State(index_manager): State<index::Manager>,
Path(genre): Path<String>,
) -> Result<Json<Vec<dto::ArtistHeader>>, APIError> {
let artists = index_manager
.get_genre(genre)
.await?
.artists
.into_iter()
.map(|a| a.into())
.collect();
Ok(Json(artists))
}
async fn get_genre_songs(
_auth: Auth,
State(index_manager): State<index::Manager>,

View file

@ -334,16 +334,12 @@ impl From<index::GenreHeader> for GenreHeader {
pub struct Genre {
#[serde(flatten)]
pub header: GenreHeader,
pub albums: Vec<AlbumHeader>,
pub artists: Vec<ArtistHeader>,
}
impl From<index::Genre> for Genre {
fn from(genre: index::Genre) -> Self {
Self {
header: GenreHeader::from(genre.header),
albums: genre.albums.into_iter().map(|a| a.into()).collect(),
artists: genre.artists.into_iter().map(|a| a.into()).collect(),
}
}
}