cool-spotify-blend/server/src/spotify_users.rs

46 lines
1.2 KiB
Rust

use std::collections::HashMap;
use crate::spotify_auth::Token;
use crate::{spotify_types::*, BASE_URL};
pub async fn get_users(
token: &Token,
users: &[&SpotifyId],
) -> Result<Vec<UserProfile>, reqwest::Error> {
let unique_users = {
let mut unique_users: Vec<_> = users.into();
unique_users.dedup();
unique_users
};
let user_map = get_users_helper(token, &unique_users).await?;
let out: Vec<UserProfile> = users
.iter()
.filter_map(|spotify_id| user_map.get(spotify_id))
.cloned()
.collect();
Ok(out)
}
async fn get_users_helper(
token: &Token,
unique_users: &[&SpotifyId],
) -> Result<HashMap<SpotifyId, UserProfile>, reqwest::Error> {
let client = reqwest::Client::new();
let mut map: HashMap<SpotifyId, UserProfile> = HashMap::new();
for user in unique_users {
let res = client
.get(BASE_URL.to_string() + "/users/" + &user.0)
.bearer_auth(token.0.clone())
.query(&[("user_id", user.0.clone())])
.send()
.await?
.json::<UserProfile>()
.await?;
map.insert(SpotifyId(user.0.clone()), res);
}
Ok(map)
}