42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
pub mod api;
|
|
pub mod models;
|
|
mod spotdl;
|
|
|
|
use axum::{
|
|
routing::get,
|
|
Router,
|
|
};
|
|
use std::net::SocketAddr;
|
|
use std::sync::Arc;
|
|
use tower_http::cors::{Any, CorsLayer};
|
|
|
|
use crate::api::AppState;
|
|
use crate::spotdl::SpotdlService;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let spotdl = SpotdlService::new();
|
|
spotdl.start_background_preload();
|
|
|
|
let app_state = Arc::new(AppState { spotdl });
|
|
|
|
let cors = CorsLayer::new()
|
|
.allow_origin(Any)
|
|
.allow_methods(Any)
|
|
.allow_headers(Any);
|
|
|
|
let app = Router::new()
|
|
.route("/api/search", get(api::search_handler))
|
|
.route("/api/stream/{id}", get(api::stream_handler))
|
|
.route("/api/artist/info", get(api::artist_info_handler))
|
|
.route("/api/browse", get(api::browse_handler))
|
|
.route("/api/recommendations", get(api::recommendations_handler))
|
|
.layer(cors)
|
|
.with_state(app_state);
|
|
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 8080));
|
|
println!("Backend running on http://{}", addr);
|
|
|
|
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
|
|
axum::serve(listener, app).await.unwrap();
|
|
}
|