71 lines
3.2 KiB
Rust
71 lines
3.2 KiB
Rust
pub mod api;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use axum::{Router, routing::{delete, get, post, put}};
|
|
use sqlx::PgPool;
|
|
|
|
use crate::config::Args;
|
|
|
|
#[derive(Clone)]
|
|
pub struct AppState {
|
|
pub pool: PgPool,
|
|
pub config: Arc<Args>,
|
|
pub system_prompt: Arc<String>,
|
|
pub merge_prompt: Arc<String>,
|
|
}
|
|
|
|
pub fn build_router(state: Arc<AppState>) -> Router {
|
|
let api = Router::new()
|
|
.route("/stats", get(api::stats))
|
|
.route("/queue", get(api::list_queue))
|
|
.route("/queue/:id", get(api::get_queue_item).delete(api::delete_queue_item))
|
|
.route("/queue/:id/approve", post(api::approve_queue_item))
|
|
.route("/queue/:id/reject", post(api::reject_queue_item))
|
|
.route("/queue/:id/retry", post(api::retry_queue_item))
|
|
.route("/queue/:id/update", put(api::update_queue_item))
|
|
.route("/queue/batch/approve", post(api::batch_approve))
|
|
.route("/queue/batch/reject", post(api::batch_reject))
|
|
.route("/queue/batch/retry", post(api::batch_retry))
|
|
.route("/queue/batch/delete", post(api::batch_delete))
|
|
.route("/artists/search", get(api::search_artists))
|
|
.route("/artists", get(api::list_artists))
|
|
.route("/artists/:id", put(api::update_artist))
|
|
.route("/artists/:id/albums", get(api::list_albums))
|
|
.route("/artists/:id/full", get(api::get_artist_full))
|
|
.route("/artists/:id/hidden", put(api::set_artist_hidden))
|
|
.route("/artists/:id/rename", put(api::rename_artist_api))
|
|
.route("/artists/:id/appearances", post(api::add_appearance))
|
|
.route("/artists/:id/appearances/:track_id", delete(api::remove_appearance))
|
|
.route("/tracks/search", get(api::search_tracks_feat))
|
|
.route("/tracks/:id", get(api::get_track).put(api::update_track))
|
|
.route("/tracks/:id/hidden", put(api::set_track_hidden))
|
|
.route("/albums/search", get(api::search_albums_for_artist))
|
|
.route("/albums/cover-by-name", get(api::album_cover_by_name))
|
|
.route("/albums/:id/cover", get(api::album_cover))
|
|
.route("/albums/:id/full", get(api::get_album_full))
|
|
.route("/albums/:id/reorder", put(api::reorder_album_tracks))
|
|
.route("/albums/:id/edit", put(api::update_album_full))
|
|
.route("/albums/:id/genre", put(api::set_album_tracks_genre))
|
|
.route("/albums/:id/hidden", put(api::set_album_hidden))
|
|
.route("/albums/:id/release_type", put(api::set_album_release_type))
|
|
.route("/albums/:id", put(api::update_album))
|
|
.route("/merges", get(api::list_merges).post(api::create_merge))
|
|
.route("/merges/:id", get(api::get_merge).put(api::update_merge))
|
|
.route("/merges/:id/approve", post(api::approve_merge))
|
|
.route("/merges/:id/reject", post(api::reject_merge))
|
|
.route("/merges/:id/retry", post(api::retry_merge))
|
|
.route("/library/tracks", get(api::library_tracks))
|
|
.route("/library/albums", get(api::library_albums))
|
|
.route("/library/artists", get(api::library_artists));
|
|
|
|
Router::new()
|
|
.route("/", get(admin_html))
|
|
.nest("/api", api)
|
|
.with_state(state)
|
|
}
|
|
|
|
async fn admin_html() -> axum::response::Html<&'static str> {
|
|
axum::response::Html(include_str!("admin.html"))
|
|
}
|