From 4acb7301f126b95e4efc877966c2184a1bad8281 Mon Sep 17 00:00:00 2001 From: Emilia Date: Wed, 12 Jul 2023 13:21:04 -0400 Subject: [PATCH] Endpoint for refreshing all users at once Should maybe be gated by auth somehow? There's no option to force here, so we aren't at risk of being rate limited. --- server/src/main.rs | 3 ++- server/src/refresh.rs | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/server/src/main.rs b/server/src/main.rs index 89b69ef..344ab4a 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -11,7 +11,7 @@ mod joint_err; mod refresh; use spotify_auth::callback_manager; -use refresh::refresh_manager; +use refresh::{refresh_manager, refresh_all_manager}; use actix_web::{App, HttpServer, HttpResponse, get, Responder, web}; use dotenvy::dotenv; @@ -66,6 +66,7 @@ async fn main() -> std::io::Result<()> { .service(succeeded) .service(failed) .service(refresh_manager) + .service(refresh_all_manager) }) .bind((address, port))? .run() diff --git a/server/src/refresh.rs b/server/src/refresh.rs index ec36244..6cd0211 100644 --- a/server/src/refresh.rs +++ b/server/src/refresh.rs @@ -39,6 +39,30 @@ pub async fn refresh_manager( } } +#[allow(non_snake_case)] +#[get("/refresh_all")] +pub async fn refresh_all_manager(state: web::Data) + -> impl Responder { + let pool = &state.pool; + let users = sqlx::query!(" + SELECT SpotifyId FROM Users + WHERE LastRefreshed < CURDATE() - INTERVAL 7 DAY + ") + .fetch_all(pool) + .await; + + if let Ok(users) = users { + for user in users { + if let Err(_) = refresh(&user.SpotifyId, pool).await { + log::error!("Tried to refresh for {}, failed", &user.SpotifyId); + } + } + return HttpResponse::Ok().body("yeah ok"); + } else { + return HttpResponse::InternalServerError().body("where the users at") + } +} + async fn refresh(spotify_id: &str, pool: &MySqlPool) -> Result<(), JointErr> { let token = spotify_auth::refresh_token_for_id(spotify_id, pool).await?; let internal_id = sql_users::get_internal_id_by_id(spotify_id, pool).await?;