diff --git a/crates/domain/src/ports/activity.rs b/crates/domain/src/ports/activity.rs index 6b328f9..82f4e97 100644 --- a/crates/domain/src/ports/activity.rs +++ b/crates/domain/src/ports/activity.rs @@ -3,10 +3,10 @@ //! Records user and system actions for the admin dashboard's activity feed. use async_trait::async_trait; -use uuid::Uuid; use crate::errors::DomainResult; use crate::models::ActivityEvent; +use crate::value_objects::ChannelId; /// Port for activity log persistence. #[async_trait] @@ -16,7 +16,7 @@ pub trait ActivityLogCommand: Send + Sync { &self, event_type: &str, detail: &str, - channel_id: Option, + channel_id: Option, ) -> DomainResult<()>; } diff --git a/crates/domain/src/ports/events.rs b/crates/domain/src/ports/events.rs index bfed7fc..b705dc8 100644 --- a/crates/domain/src/ports/events.rs +++ b/crates/domain/src/ports/events.rs @@ -42,6 +42,13 @@ pub trait EventPublisher: Send + Sync { async fn publish(&self, event: DomainEvent) -> DomainResult<()>; } +/// Port for consuming domain events from a queue or channel. +#[async_trait] +pub trait EventConsumer: Send + Sync { + /// Block until the next event is available and return it. + async fn recv(&self) -> DomainResult; +} + /// Port for handling domain events. /// /// Each handler is responsible for one side-effect (e.g. logging, webhook diff --git a/crates/domain/src/ports/mod.rs b/crates/domain/src/ports/mod.rs index b2e2660..03fa449 100644 --- a/crates/domain/src/ports/mod.rs +++ b/crates/domain/src/ports/mod.rs @@ -25,7 +25,7 @@ pub mod user; pub use activity::{ActivityLogCommand, ActivityLogQuery}; pub use auth::AuthService; pub use channel::{ChannelCommand, ChannelQuery}; -pub use events::{DomainEvent, EventHandler, EventPublisher}; +pub use events::{DomainEvent, EventConsumer, EventHandler, EventPublisher}; pub use library::{LibraryCommand, LibraryQuery, LibrarySyncAdapter}; pub use media::{ Collection, IMediaProvider, IProviderRegistry, ProviderCapabilities, SeriesSummary, diff --git a/crates/domain/src/ports/schedule.rs b/crates/domain/src/ports/schedule.rs index 37d4a8a..6b8ff41 100644 --- a/crates/domain/src/ports/schedule.rs +++ b/crates/domain/src/ports/schedule.rs @@ -4,11 +4,9 @@ use std::collections::HashMap; use async_trait::async_trait; use chrono::{DateTime, Utc}; -use uuid::Uuid; - use crate::errors::DomainResult; use crate::models::{GeneratedSchedule, PlaybackRecord}; -use crate::value_objects::{BlockId, ChannelId, MediaItemId}; +use crate::value_objects::{BlockId, ChannelId, MediaItemId, ScheduleId}; /// Write-side port for schedule and playback persistence. #[async_trait] @@ -71,6 +69,6 @@ pub trait ScheduleQuery: Send + Sync { async fn get_schedule_by_id( &self, channel_id: ChannelId, - schedule_id: Uuid, + schedule_id: ScheduleId, ) -> DomainResult>; }