perf: optimize user fetching code

This commit is contained in:
Radical 2025-05-01 20:18:39 +02:00
parent 705abeb643
commit c009d578a7

View file

@ -1,6 +1,7 @@
use actix_web::{error, post, web, Error, HttpResponse}; use actix_web::{error, post, web, Error, HttpResponse};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use futures::StreamExt; use futures::StreamExt;
use uuid::Uuid;
use crate::{api::v1::auth::check_access_token, Data}; use crate::{api::v1::auth::check_access_token, Data};
@ -40,27 +41,29 @@ pub async fn res(mut payload: web::Payload, path: web::Path<(String,)>, data: we
return Ok(authorized.unwrap_err()) return Ok(authorized.unwrap_err())
} }
let uuid = authorized.unwrap(); let mut uuid = authorized.unwrap();
if request != "me" {
let requested_uuid = Uuid::parse_str(&request);
if requested_uuid.is_err() {
return Ok(HttpResponse::BadRequest().json(r#"{ "error": "UUID is invalid!" }"#))
}
uuid = requested_uuid.unwrap()
}
if request == "me" {
let row = sqlx::query_as(&format!("SELECT username, display_name FROM users WHERE uuid = '{}'", uuid)) let row = sqlx::query_as(&format!("SELECT username, display_name FROM users WHERE uuid = '{}'", uuid))
.fetch_one(&data.pool) .fetch_one(&data.pool)
.await .await;
.unwrap();
let (username, display_name): (String, Option<String>) = row; if row.is_err() {
eprintln!("{}", row.unwrap_err());
return Ok(HttpResponse::Ok().json(Response { uuid: uuid.to_string(), username, display_name: display_name.unwrap_or_default() })) return Ok(HttpResponse::InternalServerError().finish())
} else {
println!("{}", request);
if let Ok(row) = sqlx::query_as(&format!("SELECT CAST(uuid as VARCHAR), username, display_name FROM users WHERE uuid = '{}'", request))
.fetch_one(&data.pool)
.await {
let (uuid, username, display_name): (String, String, Option<String>) = row;
return Ok(HttpResponse::Ok().json(Response { uuid, username, display_name: display_name.unwrap_or_default() }))
} }
Ok(HttpResponse::NotFound().finish()) let (username, display_name): (String, Option<String>) = row.unwrap();
}
Ok(HttpResponse::Ok().json(Response { uuid: uuid.to_string(), username, display_name: display_name.unwrap_or_default() }))
} }