diff --git a/src/api/v1/servers/uuid/channels/mod.rs b/src/api/v1/servers/uuid/channels/mod.rs index 6ecda6f..163234b 100644 --- a/src/api/v1/servers/uuid/channels/mod.rs +++ b/src/api/v1/servers/uuid/channels/mod.rs @@ -9,14 +9,14 @@ use log::error; mod uuid; -#[derive(Serialize, Clone, FromRow)] +#[derive(Serialize, FromRow)] struct ChannelPermission { role_uuid: String, permissions: i32 } -#[derive(Serialize, Clone)] -pub struct Channel { +#[derive(Serialize)] +struct Channel { uuid: String, name: String, description: Option, @@ -64,37 +64,6 @@ impl Channel { Ok(channels?) } - - pub async fn fetch_one(pool: &Pool, guild_uuid: Uuid, channel_uuid: Uuid) -> Result { - let row = sqlx::query_as(&format!("SELECT CAST(uuid AS VARCHAR), name, description FROM channels WHERE guild_uuid = '{}' AND uuid = '{}'", guild_uuid, channel_uuid)) - .fetch_one(pool) - .await; - - if let Err(error) = row { - error!("{}", error); - - return Err(HttpResponse::InternalServerError().finish()) - } - - let (uuid, name, description): (String, String, Option) = row.unwrap(); - - let row = sqlx::query_as(&format!("SELECT CAST(uuid AS VARCHAR), name, description FROM channels WHERE guild_uuid = '{}' AND uuid = '{}'", guild_uuid, channel_uuid)) - .fetch_all(pool) - .await; - - if let Err(error) = row { - error!("{}", error); - - return Err(HttpResponse::InternalServerError().finish()) - } - - Ok(Self { - uuid, - name, - description, - permissions: row.unwrap(), - }) - } } #[get("{uuid}/channels")] @@ -127,28 +96,14 @@ pub async fn response(req: HttpRequest, path: web::Path<(Uuid,)>, data: web::Dat return Ok(HttpResponse::InternalServerError().finish()) } - let _member_uuid = Uuid::from_str(&row.unwrap()).unwrap(); + let member_uuid = Uuid::from_str(&row.unwrap()).unwrap(); - let cache_result = data.get_cache_key(format!("{}_channels", guild_uuid)).await; - if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) - } + let channels = Channel::fetch_all(&data.pool, guild_uuid).await; - let channels_result = Channel::fetch_all(&data.pool, guild_uuid).await; - - if let Err(error) = channels_result { + if let Err(error) = channels { return Ok(error) } - let channels = channels_result.unwrap(); - - let cache_result = data.set_cache_key(format!("{}_channels", guild_uuid), channels.clone(), 1800).await; - - if let Err(error) = cache_result { - error!("{}", error); - return Ok(HttpResponse::InternalServerError().finish()); - } - - Ok(HttpResponse::Ok().json(channels)) + Ok(HttpResponse::Ok().json(channels.unwrap())) } diff --git a/src/api/v1/servers/uuid/channels/uuid/mod.rs b/src/api/v1/servers/uuid/channels/uuid/mod.rs index 028ac99..87a2b7b 100644 --- a/src/api/v1/servers/uuid/channels/uuid/mod.rs +++ b/src/api/v1/servers/uuid/channels/uuid/mod.rs @@ -1,64 +1 @@ mod messages; -use std::str::FromStr; - -use actix_web::{get, web, Error, HttpRequest, HttpResponse}; -use crate::{api::v1::auth::check_access_token, utils::get_auth_header, Data}; -use ::uuid::Uuid; -use log::error; -use super::Channel; - -#[get("{uuid}/channels/{channel_uuid}")] -pub async fn response(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, data: web::Data) -> Result { - let headers = req.headers(); - - let auth_header = get_auth_header(headers); - - if let Err(error) = auth_header { - return Ok(error) - } - - let (guild_uuid, channel_uuid) = path.into_inner(); - - let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; - - if let Err(error) = authorized { - return Ok(error) - } - - let uuid = authorized.unwrap(); - - let row: Result = sqlx::query_scalar(&format!("SELECT CAST(uuid AS VARCHAR) FROM guild_members WHERE guild_uuid = '{}' AND user_uuid = '{}'", guild_uuid, uuid)) - .fetch_one(&data.pool) - .await; - - if let Err(error) = row { - error!("{}", error); - - return Ok(HttpResponse::InternalServerError().finish()) - } - - let _member_uuid = Uuid::from_str(&row.unwrap()).unwrap(); - - let cache_result = data.get_cache_key(format!("{}", channel_uuid)).await; - - if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) - } - - let channel_result = Channel::fetch_one(&data.pool, guild_uuid, channel_uuid).await; - - if let Err(error) = channel_result { - return Ok(error) - } - - let channel = channel_result.unwrap(); - - let cache_result = data.set_cache_key(format!("{}", channel_uuid), channel.clone(), 60).await; - - if let Err(error) = cache_result { - error!("{}", error); - return Ok(HttpResponse::InternalServerError().finish()); - } - - Ok(HttpResponse::Ok().json(channel)) -}