From db326a4ad37f8e31a74bb7cf87b8deae1b48393e Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 11 Feb 2020 21:11:19 +0000 Subject: Add match function --- src/serve.rs | 62 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 23 deletions(-) (limited to 'src/serve.rs') diff --git a/src/serve.rs b/src/serve.rs index babb3fe..da7076f 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -33,13 +33,7 @@ pub fn get_tracks(name: String, url: String) -> String { &[&user_id], ) .unwrap(); - let uid: i32 = client - .query( - "SELECT user_id FROM suser where user_name = $1;", - &[&user_id], - ) - .unwrap()[0] - .get(0); + let uid = get_uid(user_id.as_ref(), &mut client); drop(client); let chunk_size = 50; let mut playlist_index = 0; @@ -161,20 +155,42 @@ pub fn token(name: String) -> Result> { "Internal Server Error".to_owned(), )), } - /*match get_token(&mut oauth) { - Some(token_info) => { - let client_credential = SpotifyClientCredentials::default() - .token_info(token_info) - .build(); - // Or set client_id and client_secret explictly - // let client_credential = SpotifyClientCredentials::default() - // .client_id("this-is-my-client-id") - // .client_secret("this-is-my-client-secret") - // .build(); - let spotify = Spotify::default() - .client_credentials_manager(client_credential) - .build(); - } - None => {} - }*/ +} + +fn get_uid(name: &str, client: &mut postgres::Client) -> i32 { + client + .query("SELECT user_id FROM suser where user_name = $1;", &[&name]) + .unwrap()[0] + .get(0) +} + +#[get("/match//")] +pub fn match_users(name1: String, name2: String) -> Result> { + let mut client = crate::CLIENT.lock().unwrap(); + let uid1 = get_uid(name1.as_ref(), &mut client); + let uid2 = get_uid(name2.as_ref(), &mut client); + let mut songs = String::new(); + for row in client + .query( + " + SELECT track_id FROM user_track where user_id = $1 ORDER BY count + INTERSECT + SELECT track_id FROM user_track where user_id = $2 ORDER BY count + ", + &[&uid1, &uid2], + ) + .unwrap() + { + let tid: i32 = row.get(0); + let song = &client + .query( + "SELECT name artist popularity FROM track where track_id = $1", + &[&tid], + ) + .unwrap()[0]; + let name: String = song.get(0); + let artist: String = song.get(1); + songs = format!("{}{} by {}\n", songs, name, artist); + } + Ok(songs) } -- cgit v1.2.3-70-g09d2