Add card support
This commit is contained in:
@@ -21,7 +21,8 @@ impl Database {
|
||||
r#"
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL
|
||||
name TEXT NOT NULL,
|
||||
card TEXT
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS interprets (
|
||||
id INTEGER PRIMARY KEY,
|
||||
@@ -121,6 +122,24 @@ impl Database {
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
pub async fn user_get_id(&self, user_card: &str) -> Result<i64> {
|
||||
let mut conn = self.pool.acquire().await?;
|
||||
|
||||
let record = sqlx::query(
|
||||
r#"
|
||||
SELECT id FROM users
|
||||
WHERE card = ?
|
||||
"#,
|
||||
)
|
||||
.bind(user_card)
|
||||
.fetch_one(&mut *conn)
|
||||
.await?;
|
||||
|
||||
let id = record.try_get("id")?;
|
||||
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
pub async fn user_add_rating(
|
||||
&self,
|
||||
user_id: i64,
|
||||
|
@@ -34,6 +34,7 @@ pub async fn http_serve(database: &Database, mpris_producer: Sender<(String, Str
|
||||
.route("/", get(root))
|
||||
.route("/rating/{rating}", get(cache_rating_only))
|
||||
.route("/userid/{user_id}", get(add_userid))
|
||||
.route("/usercard/{user_card}", get(add_userid_by_card))
|
||||
.route("/{user_id}/{rating}", get(add_rating))
|
||||
.with_state(shared_state);
|
||||
|
||||
@@ -92,3 +93,34 @@ async fn add_userid(Path(user_id): Path<i64>, State(shared): State<SharedState>)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn add_userid_by_card(
|
||||
Path(user_card): Path<String>,
|
||||
State(shared): State<SharedState>,
|
||||
) -> Response {
|
||||
let mut mpris_rx = shared.mpris_sender.subscribe();
|
||||
|
||||
// Get the current interpret and track from the watch channel
|
||||
let (interpret, track) = (*mpris_rx.borrow_and_update()).clone();
|
||||
|
||||
let rating = shared.rating.load(Ordering::Relaxed);
|
||||
|
||||
let user_id = match shared.database.user_get_id(&user_card).await {
|
||||
Ok(id) => id,
|
||||
Err(e) => {
|
||||
return (StatusCode::BAD_REQUEST, e.to_string()).into_response();
|
||||
}
|
||||
};
|
||||
|
||||
match shared
|
||||
.database
|
||||
.user_add_rating(user_id, &interpret, &track, rating)
|
||||
.await
|
||||
{
|
||||
Ok(_) => (StatusCode::OK, "Done.").into_response(),
|
||||
Err(e) => {
|
||||
eprintln!("HTTP error: {e}");
|
||||
(StatusCode::BAD_REQUEST, e.to_string()).into_response()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user