diff --git a/src/api/v1/users/uuid.rs b/src/api/v1/users/uuid.rs index f4c1f13..577af0e 100644 --- a/src/api/v1/users/uuid.rs +++ b/src/api/v1/users/uuid.rs @@ -1,11 +1,12 @@ use actix_web::{Error, HttpRequest, HttpResponse, get, web}; use log::error; use serde::Serialize; +use tokio::sync::Mutex; use uuid::Uuid; use crate::{Data, api::v1::auth::check_access_token, utils::get_auth_header}; -#[derive(Serialize)] +#[derive(Serialize, Clone)] struct Response { uuid: String, username: String, @@ -34,6 +35,12 @@ pub async fn res( return Ok(error); } + let cache_result = data.get_cache_key(uuid.to_string()).await; + + if let Ok(cache_hit) = cache_result { + return Ok(HttpResponse::Ok().json(cache_hit)) + } + let row = sqlx::query_as(&format!( "SELECT username, display_name FROM users WHERE uuid = '{}'", uuid @@ -48,9 +55,18 @@ pub async fn res( let (username, display_name): (String, Option) = row.unwrap(); - Ok(HttpResponse::Ok().json(Response { + let user = Response { uuid: uuid.to_string(), username, display_name: display_name.unwrap_or_default(), - })) + }; + + let cache_result = data.set_cache_key(uuid.to_string(), user.clone(), 1800).await; + + if let Err(error) = cache_result { + error!("{}", error); + return Ok(HttpResponse::InternalServerError().finish()); + } + + Ok(HttpResponse::Ok().json(user)) }