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?;