summaryrefslogtreecommitdiff
path: root/src/serve.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/serve.rs')
-rw-r--r--src/serve.rs62
1 files changed, 39 insertions, 23 deletions
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<Redirect, status::Custom<String>> {
"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/<name1>/<name2>")]
+pub fn match_users(name1: String, name2: String) -> Result<String, status::Custom<String>> {
+ 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)
}