Genre album/artists endpoints
This commit is contained in:
parent
8d51344dc3
commit
143da76673
2 changed files with 32 additions and 4 deletions
|
@ -61,6 +61,8 @@ pub fn router() -> Router<App> {
|
||||||
.route("/artists/:artists/albums/:name", get(get_album))
|
.route("/artists/:artists/albums/:name", get(get_album))
|
||||||
.route("/genres", get(get_genres))
|
.route("/genres", get(get_genres))
|
||||||
.route("/genres/:genre", get(get_genre))
|
.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("/genres/:genre/songs", get(get_genre_songs))
|
||||||
.route("/random", get(get_random_albums)) // Deprecated
|
.route("/random", get(get_random_albums)) // Deprecated
|
||||||
.route("/recent", get(get_recent_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()))
|
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(
|
async fn get_genre_songs(
|
||||||
_auth: Auth,
|
_auth: Auth,
|
||||||
State(index_manager): State<index::Manager>,
|
State(index_manager): State<index::Manager>,
|
||||||
|
|
|
@ -334,16 +334,12 @@ impl From<index::GenreHeader> for GenreHeader {
|
||||||
pub struct Genre {
|
pub struct Genre {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub header: GenreHeader,
|
pub header: GenreHeader,
|
||||||
pub albums: Vec<AlbumHeader>,
|
|
||||||
pub artists: Vec<ArtistHeader>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<index::Genre> for Genre {
|
impl From<index::Genre> for Genre {
|
||||||
fn from(genre: index::Genre) -> Self {
|
fn from(genre: index::Genre) -> Self {
|
||||||
Self {
|
Self {
|
||||||
header: GenreHeader::from(genre.header),
|
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(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue