app: add organization + sharing commands/queries

This commit is contained in:
2026-05-31 05:17:51 +02:00
parent 536bf3463a
commit d1394ce7bb
29 changed files with 740 additions and 1 deletions

View File

@@ -0,0 +1,39 @@
use std::sync::Arc;
use domain::{
errors::DomainError,
events::DomainEvent,
ports::{EventPublisher, ShareRepository},
value_objects::{DateTimeStamp, SystemId},
};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct RevokeShareCommand {
pub scope_id: SystemId,
pub revoked_by: SystemId,
}
pub struct RevokeShareHandler {
share_repo: Arc<dyn ShareRepository>,
event_pub: Arc<dyn EventPublisher>,
}
impl RevokeShareHandler {
pub fn new(share_repo: Arc<dyn ShareRepository>, event_pub: Arc<dyn EventPublisher>) -> Self {
Self { share_repo, event_pub }
}
pub async fn execute(&self, cmd: RevokeShareCommand) -> Result<(), DomainError> {
self.share_repo.find_scope_by_id(&cmd.scope_id).await?
.ok_or_else(|| DomainError::NotFound(format!("Share scope {} not found", cmd.scope_id)))?;
self.share_repo.delete_scope(&cmd.scope_id).await?;
self.event_pub.publish(DomainEvent::ShareRevoked {
scope_id: cmd.scope_id,
revoked_by: cmd.revoked_by,
timestamp: DateTimeStamp::now(),
}).await?;
Ok(())
}
}