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/main.rs | 30 +++++------------------------ src/serve.rs | 62 ++++++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 48 deletions(-) diff --git a/src/main.rs b/src/main.rs index b0bda1b..c99244d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,37 +16,18 @@ lazy_static! { fn main() { initialize_db().unwrap(); - //setup_db().unwrap(); println!("connected with db"); rocket::ignite() - .mount("/", routes![serve::token, serve::get_tracks]) + .mount( + "/", + routes![serve::token, serve::get_tracks, serve::match_users], + ) .launch(); } -fn setup_db() -> Result<(), postgres::Error> { - let name = "Ferris"; - let data = None::<&[u8]>; - let mut client = CLIENT.lock().unwrap(); - client.execute( - "INSERT INTO person (name, data) VALUES ($1, $2)", - &[&name, &data], - )?; - - for row in client.query("SELECT id, name, data FROM person", &[])? { - let id: i32 = row.get(0); - let name: &str = row.get(1); - let data: Option<&[u8]> = row.get(2); - - println!("found person: {} {} {:?}", id, name, data); - } - Ok(()) -} - fn initialize_db() -> Result<(), postgres::Error> { let mut client = CLIENT.lock().unwrap(); - let _ = client.batch_execute( - "DROP TABLE user_track; DROP TABLE suser; DROP TABLE track;" - ); + let _ = client.batch_execute("DROP TABLE user_track; DROP TABLE suser; DROP TABLE track;"); client.batch_execute( " CREATE TABLE track ( @@ -70,4 +51,3 @@ fn initialize_db() -> Result<(), postgres::Error> { )?; Ok(()) } - 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-54-g00ecf