This commit is contained in:
2026-07-30 19:34:39 +02:00
parent 1bb00e1edf
commit 086e5ab0ea
7 changed files with 71 additions and 4 deletions
+5
View File
@@ -3,6 +3,11 @@ use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, ToSchema, utoipa::IntoParams)]
pub struct UserQueryParams {
pub server_id: Option<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct CreateUserRequest {
pub username: String,
+4
View File
@@ -28,3 +28,7 @@ pub struct MessageFilter {
pub struct ChannelFilter {
pub server_id: Option<uuid::Uuid>,
}
pub struct UserFilter {
pub server_id: Option<uuid::Uuid>,
}
+15 -2
View File
@@ -1,8 +1,10 @@
use crate::auth::password;
use crate::models::user;
use crate::models::{server_user, user};
use crate::repositories::types::UserFilter;
use crate::repositories::{AnyResult, RepositoryContext};
use sea_orm::{
ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, PaginatorTrait, QueryFilter, Set,
ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, JoinType, PaginatorTrait,
QueryFilter, QuerySelect, RelationTrait, Set,
};
use std::sync::Arc;
@@ -16,6 +18,17 @@ impl UserRepository {
Ok(user::Entity::find().all(&self.context.db).await?)
}
pub async fn filter(&self, filter: UserFilter) -> AnyResult<Vec<user::Model>> {
let mut query = user::Entity::find();
if let Some(s_id) = filter.server_id {
query = query
.join(JoinType::InnerJoin, user::Relation::ServerUser.def())
.filter(server_user::Column::ServerId.eq(s_id))
.distinct();
}
Ok(query.all(&self.context.db).await?)
}
pub async fn count(&self) -> AnyResult<u64> {
Ok(user::Entity::find().count(&self.context.db).await?)
}