diff --git a/migrations/2025-07-22-195121_add_ban/up.sql b/migrations/2025-07-22-195121_add_ban/up.sql index d8d7fab..020a1b0 100644 --- a/migrations/2025-07-22-195121_add_ban/up.sql +++ b/migrations/2025-07-22-195121_add_ban/up.sql @@ -3,6 +3,5 @@ CREATE TABLE guild_bans ( guild_uuid uuid NOT NULL REFERENCES guilds(uuid) ON DELETE CASCADE, user_uuid uuid NOT NULL REFERENCES users(uuid), reason VARCHAR(200) DEFAULT NULL, - ban_time TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (user_uuid, guild_uuid) ); diff --git a/src/api/v1/guilds/uuid/bans.rs b/src/api/v1/guilds/uuid/bans.rs deleted file mode 100644 index 44ed48d..0000000 --- a/src/api/v1/guilds/uuid/bans.rs +++ /dev/null @@ -1,36 +0,0 @@ -use std::sync::Arc; - -use axum::{ - Extension, Json, - extract::{Path, State}, - http::StatusCode, - response::IntoResponse, -}; -use uuid::Uuid; - -use crate::{ - AppState, - api::v1::auth::CurrentUser, - error::Error, - objects::{GuildBan, Member, Permissions}, - utils::global_checks, -}; - -pub async fn get( - State(app_state): State>, - Path(guild_uuid): Path, - Extension(CurrentUser(uuid)): Extension>, -) -> Result { - global_checks(&app_state, uuid).await?; - - let mut conn = app_state.pool.get().await?; - - let member = Member::check_membership(&mut conn, uuid, guild_uuid).await?; - member - .check_permission(&app_state, Permissions::BanMember) - .await?; - - let all_guild_bans = GuildBan::fetch_all(&mut conn, guild_uuid).await?; - - Ok((StatusCode::OK, Json(all_guild_bans))) -} diff --git a/src/api/v1/guilds/uuid/mod.rs b/src/api/v1/guilds/uuid/mod.rs index 2174932..52f0b64 100644 --- a/src/api/v1/guilds/uuid/mod.rs +++ b/src/api/v1/guilds/uuid/mod.rs @@ -12,7 +12,6 @@ use axum::{ use bytes::Bytes; use uuid::Uuid; -mod bans; mod channels; mod invites; mod members; @@ -43,8 +42,6 @@ pub fn router() -> Router> { .route("/invites", post(invites::create)) // Members .route("/members", get(members::get)) - // Bans - .route("/bans", get(bans::get)) } /// `GET /api/v1/guilds/{uuid}` DESCRIPTION diff --git a/src/objects/bans.rs b/src/objects/bans.rs deleted file mode 100644 index 9eb58f5..0000000 --- a/src/objects/bans.rs +++ /dev/null @@ -1,57 +0,0 @@ -use diesel::{ExpressionMethods, QueryDsl, Queryable, Selectable, SelectableHelper}; -use serde::{Deserialize, Serialize}; -use uuid::Uuid; - -use diesel_async::RunQueryDsl; - -use crate::{Conn, error::Error, objects::load_or_empty, schema::guild_bans}; - -#[derive(Selectable, Queryable, Serialize, Deserialize)] -#[diesel(table_name = guild_bans)] -#[diesel(check_for_backend(diesel::pg::Pg))] -pub struct GuildBan { - pub guild_uuid: Uuid, - pub user_uuid: Uuid, - pub reason: Option, - pub ban_time: chrono::DateTime, -} - -impl GuildBan { - pub async fn fetch_one( - conn: &mut Conn, - guild_uuid: Uuid, - user_uuid: Uuid, - ) -> Result { - use guild_bans::dsl; - let guild_ban = dsl::guild_bans - .filter(dsl::guild_uuid.eq(guild_uuid)) - .filter(dsl::user_uuid.eq(user_uuid)) - .select(GuildBan::as_select()) - .get_result(conn) - .await?; - - Ok(guild_ban) - } - - pub async fn fetch_all(conn: &mut Conn, guild_uuid: Uuid) -> Result, Error> { - use guild_bans::dsl; - let all_guild_bans = load_or_empty( - dsl::guild_bans - .filter(dsl::guild_uuid.eq(guild_uuid)) - .load(conn) - .await, - )?; - - Ok(all_guild_bans) - } - - pub async fn unban(self, conn: &mut Conn) -> Result<(), Error> { - use guild_bans::dsl; - diesel::delete(guild_bans::table) - .filter(dsl::guild_uuid.eq(self.guild_uuid)) - .filter(dsl::user_uuid.eq(self.user_uuid)) - .execute(conn) - .await?; - Ok(()) - } -} diff --git a/src/objects/member.rs b/src/objects/member.rs index fcd0b6b..50a0a24 100644 --- a/src/objects/member.rs +++ b/src/objects/member.rs @@ -1,5 +1,6 @@ use diesel::{ - ExpressionMethods, Insertable, QueryDsl, Queryable, Selectable, SelectableHelper, insert_into, + ExpressionMethods, Insertable, QueryDsl, Queryable, Selectable, SelectableHelper, delete, + insert_into, }; use diesel_async::RunQueryDsl; use serde::{Deserialize, Serialize}; @@ -73,6 +74,13 @@ pub struct Member { user: User, } +#[derive(Serialize, Deserialize)] +pub struct GuildBan { + pub guild_uuid: Uuid, + pub user_uuid: Uuid, + pub reason: String, +} + impl Member { pub async fn count(conn: &mut Conn, guild_uuid: Uuid) -> Result { use guild_members::dsl; @@ -200,7 +208,7 @@ impl Member { } pub async fn delete(self, conn: &mut Conn) -> Result<(), Error> { - diesel::delete(guild_members::table) + delete(guild_members::table) .filter(guild_members::uuid.eq(self.uuid)) .execute(conn) .await?; diff --git a/src/objects/mod.rs b/src/objects/mod.rs index 3bcce9c..4af16d8 100644 --- a/src/objects/mod.rs +++ b/src/objects/mod.rs @@ -7,7 +7,6 @@ use log::debug; use serde::Deserialize; use uuid::Uuid; -mod bans; mod channel; mod email_token; mod friends; @@ -20,7 +19,6 @@ mod password_reset_token; mod role; mod user; -pub use bans::GuildBan; pub use channel::Channel; pub use email_token::EmailToken; pub use friends::Friend; diff --git a/src/schema.rs b/src/schema.rs index e4d6730..54284d6 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -53,7 +53,6 @@ diesel::table! { user_uuid -> Uuid, #[max_length = 200] reason -> Nullable, - ban_time -> Timestamptz, } }