pre-metrics
This commit is contained in:
+53
-12
@@ -1,32 +1,40 @@
|
||||
use super::types::{ServerExplorerItem, ServerTree};
|
||||
use super::RepositoryContext;
|
||||
use crate::models::{category, channel, group, server};
|
||||
use sea_orm::{ActiveModelTrait, ColumnTrait, DbErr, EntityTrait, QueryFilter, Set};
|
||||
use super::{AnyResult, RepositoryContext};
|
||||
use crate::models::{category, channel, group, server, server_user};
|
||||
use sea_orm::prelude::*;
|
||||
use sea_orm::{ActiveModelTrait, Set};
|
||||
|
||||
use std::sync::Arc;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ServerRepository {
|
||||
pub context: Arc<RepositoryContext>,
|
||||
}
|
||||
|
||||
impl ServerRepository {
|
||||
pub async fn get_all(&self) -> Result<Vec<server::Model>, DbErr> {
|
||||
server::Entity::find().all(&self.context.db).await
|
||||
pub async fn get_all(&self) -> AnyResult<Vec<server::Model>> {
|
||||
Ok(server::Entity::find().all(&self.context.db).await?)
|
||||
}
|
||||
|
||||
pub async fn get_by_id(&self, id: uuid::Uuid) -> Result<Option<server::Model>, DbErr> {
|
||||
server::Entity::find_by_id(id).one(&self.context.db).await
|
||||
pub async fn get_by_id(&self, id: Uuid) -> AnyResult<Option<server::Model>> {
|
||||
Ok(server::Entity::find_by_id(id).one(&self.context.db).await?)
|
||||
}
|
||||
|
||||
pub async fn update(&self, active: server::ActiveModel) -> Result<server::Model, DbErr> {
|
||||
pub async fn get_default(&self) -> AnyResult<Option<server::Model>> {
|
||||
Ok(server::Entity::find()
|
||||
.filter(server::Column::IsDefault.eq(true))
|
||||
.one(&self.context.db)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn update(&self, active: server::ActiveModel) -> AnyResult<server::Model> {
|
||||
let server = active.update(&self.context.db).await?;
|
||||
self.context.events.emit("server_updated", server.clone());
|
||||
Ok(server)
|
||||
}
|
||||
|
||||
pub async fn create(&self, active: server::ActiveModel) -> Result<server::Model, DbErr> {
|
||||
pub async fn create(&self, active: server::ActiveModel) -> AnyResult<server::Model> {
|
||||
let server = active.insert(&self.context.db).await?;
|
||||
|
||||
// Créer le groupe par défaut pour le serveur
|
||||
@@ -42,18 +50,51 @@ impl ServerRepository {
|
||||
Ok(server)
|
||||
}
|
||||
|
||||
pub async fn delete(&self, id: uuid::Uuid) -> Result<bool, DbErr> {
|
||||
pub async fn create_with_args(
|
||||
&self,
|
||||
name: String,
|
||||
is_default: bool,
|
||||
) -> AnyResult<server::Model> {
|
||||
let active = server::ActiveModel {
|
||||
name: Set(name),
|
||||
is_default: Set(is_default),
|
||||
..Default::default()
|
||||
};
|
||||
self.create(active).await
|
||||
}
|
||||
|
||||
pub async fn add_user(&self, server_id: Uuid, user_id: Uuid) -> AnyResult<bool> {
|
||||
let res = server_user::ActiveModel {
|
||||
server_id: Set(server_id),
|
||||
user_id: Set(user_id),
|
||||
..Default::default()
|
||||
}
|
||||
.insert(&self.context.db)
|
||||
.await?;
|
||||
|
||||
self.context
|
||||
.events
|
||||
.emit("server_user_created", (server_id, user_id));
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
pub async fn delete(&self, id: Uuid) -> AnyResult<bool> {
|
||||
let res = server::Entity::delete_by_id(id)
|
||||
.exec(&self.context.db)
|
||||
.await?;
|
||||
self.context.events.emit("server_deleted", id);
|
||||
Ok(res.rows_affected > 0)
|
||||
}
|
||||
|
||||
pub async fn count(&self) -> AnyResult<usize> {
|
||||
let res = server::Entity::find().count(&self.context.db).await?;
|
||||
Ok(res as usize)
|
||||
}
|
||||
}
|
||||
|
||||
// Helpers
|
||||
impl ServerRepository {
|
||||
pub async fn get_tree(&self, server_id: Uuid) -> Result<ServerTree, DbErr> {
|
||||
pub async fn get_tree(&self, server_id: Uuid) -> AnyResult<ServerTree> {
|
||||
// 1. Récupération des catégories avec leurs channels
|
||||
let categories_with_channels = category::Entity::find()
|
||||
.filter(category::Column::ServerId.eq(server_id))
|
||||
|
||||
Reference in New Issue
Block a user