initial api impl
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
[package]
|
||||
name = "spoticord_api"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
spoticord_database = { path = "../spoticord_database" }
|
||||
spoticord_session = { path = "../spoticord_session" }
|
||||
spoticord_api_grpc = { path = "../spoticord_api_grpc"}
|
||||
prost = "0.13.3"
|
||||
tokio = {version = "1.38.0", features = ["io-util", "net", "rt-multi-thread"]}
|
||||
axum = "0.7.5"
|
||||
env_logger = "0.11.3"
|
||||
log = "0.4.21"
|
||||
thiserror = "1.0.61"
|
||||
tonic = "0.12.3"
|
||||
@@ -0,0 +1,39 @@
|
||||
use log::info;
|
||||
use spoticord_api_grpc::spoticord_api::service::PlayPlaylistRequest;
|
||||
use spoticord_session::manager::{SessionManager, SessionQuery};
|
||||
use tonic::{Request, Response, Status};
|
||||
|
||||
pub struct SpoticordApi {
|
||||
pub session: SessionManager,
|
||||
}
|
||||
|
||||
#[tonic::async_trait]
|
||||
impl spoticord_api_grpc::spoticord_api::service::spoticord_api_server::SpoticordApi
|
||||
for SpoticordApi
|
||||
{
|
||||
async fn play_playlist(
|
||||
&self,
|
||||
request: Request<PlayPlaylistRequest>,
|
||||
) -> Result<Response<spoticord_api_grpc::spoticord_api::service::Response>, Status> {
|
||||
let playlist = request.into_inner();
|
||||
info!(
|
||||
"Playing {} for {}",
|
||||
playlist.playlist_uri, playlist.discord_user_id
|
||||
);
|
||||
|
||||
let session = self
|
||||
.session
|
||||
.get_session(SessionQuery::Owner(playlist.discord_user_id.into()))
|
||||
.unwrap();
|
||||
|
||||
session.queue_playlist(playlist.playlist_uri).await.unwrap();
|
||||
|
||||
let response = spoticord_api_grpc::spoticord_api::service::Response {
|
||||
resp: Option::from(
|
||||
spoticord_api_grpc::spoticord_api::service::response::Resp::Success(true),
|
||||
),
|
||||
};
|
||||
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user