fix domain ports: add EventConsumer, use ID newtypes
This commit is contained in:
@@ -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<Uuid>,
|
||||
channel_id: Option<ChannelId>,
|
||||
) -> DomainResult<()>;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<DomainEvent>;
|
||||
}
|
||||
|
||||
/// Port for handling domain events.
|
||||
///
|
||||
/// Each handler is responsible for one side-effect (e.g. logging, webhook
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<Option<GeneratedSchedule>>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user