This commit is contained in:
2026-07-27 10:38:22 +02:00
parent 7b33b76b3d
commit ed4cb2a39c
11 changed files with 316 additions and 179 deletions
+3 -5
View File
@@ -1,4 +1,5 @@
use crate::models::{channel, channel_role_permission, channel_user_permission};
use crate::repositories::types::ChannelFilter;
use crate::repositories::{AnyResult, RepositoryContext};
use sea_orm::sea_query::OnConflict;
use sea_orm::{ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, Set};
@@ -21,14 +22,11 @@ impl ChannelRepository {
Ok(channel::Entity::find().all(&self.context.db).await?)
}
pub async fn filter(&self, server_id: Option<Uuid>, category_id: Option<Uuid>) -> AnyResult<Vec<channel::Model>> {
pub async fn filter(&self, filter: ChannelFilter) -> AnyResult<Vec<channel::Model>> {
let mut query = channel::Entity::find();
if let Some(s_id) = server_id {
if let Some(s_id) = filter.server_id {
query = query.filter(channel::Column::ServerId.eq(s_id));
}
if let Some(c_id) = category_id {
query = query.filter(channel::Column::CategoryId.eq(c_id));
}
Ok(query.all(&self.context.db).await?)
}
+4
View File
@@ -24,3 +24,7 @@ pub struct MessageFilter {
pub before_id: Option<uuid::Uuid>,
pub limit: Option<u64>,
}
pub struct ChannelFilter {
pub server_id: Option<uuid::Uuid>,
}
+1 -5
View File
@@ -7,15 +7,11 @@ use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, ToSchema, utoipa::IntoParams)]
pub struct ChannelQueryParams {
pub server_id: Option<Uuid>,
pub category_id: Option<Uuid>,
}
impl Default for ChannelQueryParams {
fn default() -> Self {
Self {
server_id: None,
category_id: None,
}
Self { server_id: None }
}
}
+6 -4
View File
@@ -2,14 +2,15 @@ use crate::core::state::AppState;
use crate::http::context::Superuser;
use crate::http::error::HTTPError;
use crate::routes::channel::dto::{
ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse, ChannelUserPermissionResponse,
CreateChannelRequest, SetChannelPermissionRequest, UpdateChannelRequest,
ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse,
ChannelUserPermissionResponse, CreateChannelRequest, SetChannelPermissionRequest,
UpdateChannelRequest,
};
use crate::routes::channel::mapper;
use axum::{
Json,
extract::{Path, Query, State},
http::StatusCode,
Json,
};
use uuid::Uuid;
@@ -30,7 +31,8 @@ pub async fn get_all(
State(state): State<AppState>,
Query(filters): Query<ChannelQueryParams>,
) -> Result<Json<Vec<ChannelResponse>>, HTTPError> {
let channels = state.repositories.channel.filter(filters.server_id, filters.category_id).await?;
let params = mapper::query_params_to_channel_filter(filters);
let channels = state.repositories.channel.filter(params).await?;
Ok(Json(
channels
.into_iter()
+9 -2
View File
@@ -1,7 +1,8 @@
use crate::models::{channel, channel_role_permission, channel_user_permission};
use crate::repositories::types::ChannelFilter;
use crate::routes::channel::dto::{
ChannelResponse, ChannelRolePermissionResponse, ChannelUserPermissionResponse,
CreateChannelRequest, UpdateChannelRequest,
ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse,
ChannelUserPermissionResponse, CreateChannelRequest, UpdateChannelRequest,
};
use sea_orm::Set;
use uuid::Uuid;
@@ -61,3 +62,9 @@ pub fn channel_role_permission_to_response(
permissions: model.permissions as u64,
}
}
pub fn query_params_to_channel_filter(params: ChannelQueryParams) -> ChannelFilter {
ChannelFilter {
server_id: params.server_id,
}
}