init
This commit is contained in:
@@ -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?)
|
||||
}
|
||||
|
||||
|
||||
@@ -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>,
|
||||
}
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user