use async_trait::async_trait; use crate::common::errors::DomainError; use crate::common::value_objects::SystemId; use super::entities::{Job, JobBatch, Plugin, ProcessingPipeline}; // --- JobRepository --- #[async_trait] pub trait JobRepository: Send + Sync { async fn find_by_id(&self, id: &SystemId) -> Result, DomainError>; async fn find_next_queued(&self) -> Result, DomainError>; async fn find_by_batch(&self, batch_id: &SystemId) -> Result, DomainError>; async fn save(&self, job: &Job) -> Result<(), DomainError>; } // --- JobBatchRepository --- #[async_trait] pub trait JobBatchRepository: Send + Sync { async fn find_by_id(&self, id: &SystemId) -> Result, DomainError>; async fn save(&self, batch: &JobBatch) -> Result<(), DomainError>; } // --- PluginRepository --- #[async_trait] pub trait PluginRepository: Send + Sync { async fn find_by_id(&self, id: &SystemId) -> Result, DomainError>; async fn find_enabled(&self) -> Result, DomainError>; async fn save(&self, plugin: &Plugin) -> Result<(), DomainError>; } // --- PipelineRepository --- #[async_trait] pub trait PipelineRepository: Send + Sync { async fn find_by_id(&self, id: &SystemId) -> Result, DomainError>; async fn find_by_trigger(&self, event: &str) -> Result, DomainError>; async fn save(&self, pipeline: &ProcessingPipeline) -> Result<(), DomainError>; }