init
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
use crate::models::{computed_permission, group, group_member, server, user};
|
||||
use crate::repositories::{AnyResult, RepositoryContext};
|
||||
// use sea_orm::prelude::*;
|
||||
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
|
||||
|
||||
use std::sync::Arc;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ComputedPermissionRepository {
|
||||
pub context: Arc<RepositoryContext>,
|
||||
}
|
||||
|
||||
impl ComputedPermissionRepository {
|
||||
pub async fn get_all(&self) -> AnyResult<Vec<computed_permission::Model>> {
|
||||
let result = computed_permission::Entity::find()
|
||||
.all(&self.context.db)
|
||||
.await?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub async fn full_sync_server(&self, server_id: Uuid) -> AnyResult<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn full_sync_user(&self, user_id: Uuid, server_id: Uuid) -> AnyResult<()> {
|
||||
// 1. Récupérer la structure (tous les salons + catégories du serveur)
|
||||
// 2. Récupérer les sources de vérité (Groupes de l'user + Perms individuelles)
|
||||
// 3. Calculer pour l'UUID du serveur (Pseudo-salon pour le Kick/Ban)
|
||||
// 4. Pour chaque salon, calculer la fusion des bits
|
||||
// 5. Tout enregistrer en une seule transaction dans `computed_permission`
|
||||
|
||||
// Récupération du serveur
|
||||
let server = server::Entity::find_by_id(server_id)
|
||||
.one(&self.context.db)
|
||||
.await?;
|
||||
|
||||
// Récupération de l'utilisateur
|
||||
let user = user::Entity::find_by_id(user_id)
|
||||
.one(&self.context.db)
|
||||
.await?;
|
||||
|
||||
// Récupération des groupes de l'utilisateur
|
||||
let groups = group::Entity::find()
|
||||
.filter(group::Column::ServerId.eq(server_id))
|
||||
.filter(group_member::Column::UserId.eq(user_id))
|
||||
.all(&self.context.db)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user