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