From 9ba634c68ed46199ca12f8589b2958d20294f27c Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Tue, 11 Feb 2020 16:19:57 +0000 Subject: Use postgres database --- src/serve.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'src/serve.rs') diff --git a/src/serve.rs b/src/serve.rs index 0dff5da..5696f12 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -26,6 +26,21 @@ pub fn get_tracks(name: String, url: String) -> String { .client_credentials_manager(client_credential) .build(); let user_id = spotify.current_user().unwrap().id; + let mut client = crate::CLIENT.lock().unwrap(); + client + .execute( + "INSERT INTO suser (user_name) VALUES ($1) ON CONFLICT (user_name) DO NOTHING;", + &[&user_id], + ) + .unwrap(); + let uid: i32 = client + .query( + "SELECT user_id FROM suser where user_name = $1;", + &[&user_id], + ) + .unwrap()[0] + .get(0); + drop(client); let chunk_size = 50; let mut playlist_index = 0; loop { @@ -54,7 +69,47 @@ pub fn get_tracks(name: String, url: String) -> String { break; } for track in tracks.items { - println!("{:?}", track.track.name); + //println!("{:?}", track.track.name); + let mut client = crate::CLIENT.lock().unwrap(); + + if track.track.id.is_none() { + println!("{:#?}", track); + continue; + } + print!(" {} ", track.track.id.clone().unwrap()); + client + .execute( + "INSERT INTO track (track_code, name, artist, popularity) + VALUES ($1, $2, $3, $4) + ON CONFLICT DO NOTHING + ", + &[&(track.track.id.clone().unwrap()), &track.track.name, &track.track.artists[0].name, &(track.track.popularity as i32)], + ) + .unwrap(); + let tid: i32 = client + .query( + "SELECT track_id FROM track where track_code = $1;", + &[&(track.track.id.clone().unwrap())], + ) + .unwrap()[0] + .get(0); + println!("uid: {} tid: {}", uid, tid); + client + .execute( + "INSERT INTO user_track (track_id, user_id, count) + VALUES ($1, $2, $3) + ON CONFLICT + ON CONSTRAINT track_user_pkey + DO UPDATE;", + &[&tid, &uid, &0], + ) + .unwrap(); + client + .execute( + "UPDATE user_track SET count = count + 1 WHERE track_id = $1 AND user_id = $2;", + &[&tid, &uid], + ) + .unwrap(); } } Err(e) => match e.downcast::() { @@ -85,6 +140,7 @@ pub fn get_tracks(name: String, url: String) -> String { } name } + #[get("/token/")] pub fn token(name: String) -> Result> { let state = rspotify::spotify::util::generate_random_string(16); -- cgit v1.2.3-54-g00ecf