feat(webhooks): add foundation layer — migration, domain events, EventBus
This commit is contained in:
@@ -88,6 +88,8 @@ pub struct Channel {
|
||||
pub logo: Option<String>,
|
||||
pub logo_position: LogoPosition,
|
||||
pub logo_opacity: f32,
|
||||
pub webhook_url: Option<String>,
|
||||
pub webhook_poll_interval_secs: u32,
|
||||
pub created_at: DateTime<Utc>,
|
||||
pub updated_at: DateTime<Utc>,
|
||||
}
|
||||
@@ -113,6 +115,8 @@ impl Channel {
|
||||
logo: None,
|
||||
logo_position: LogoPosition::default(),
|
||||
logo_opacity: 1.0,
|
||||
webhook_url: None,
|
||||
webhook_poll_interval_secs: 5,
|
||||
created_at: now,
|
||||
updated_at: now,
|
||||
}
|
||||
|
||||
34
k-tv-backend/domain/src/events.rs
Normal file
34
k-tv-backend/domain/src/events.rs
Normal file
@@ -0,0 +1,34 @@
|
||||
//! Domain events emitted when important state transitions occur.
|
||||
//!
|
||||
//! These are pure data — no I/O, no tokio deps. The transport
|
||||
//! (tokio::sync::broadcast) lives in `api`; domain only owns the schema.
|
||||
|
||||
use uuid::Uuid;
|
||||
use crate::entities::{Channel, GeneratedSchedule, ScheduledSlot};
|
||||
|
||||
/// Events emitted by the application when important state changes occur.
|
||||
///
|
||||
/// Must be `Clone + Send + 'static` for use as a `broadcast::channel` item.
|
||||
#[derive(Clone)]
|
||||
pub enum DomainEvent {
|
||||
BroadcastTransition {
|
||||
channel_id: Uuid,
|
||||
slot: ScheduledSlot,
|
||||
},
|
||||
NoSignal {
|
||||
channel_id: Uuid,
|
||||
},
|
||||
ScheduleGenerated {
|
||||
channel_id: Uuid,
|
||||
schedule: GeneratedSchedule,
|
||||
},
|
||||
ChannelCreated {
|
||||
channel: Channel,
|
||||
},
|
||||
ChannelUpdated {
|
||||
channel: Channel,
|
||||
},
|
||||
ChannelDeleted {
|
||||
channel_id: Uuid,
|
||||
},
|
||||
}
|
||||
@@ -9,11 +9,13 @@ pub mod iptv;
|
||||
pub mod ports;
|
||||
pub mod repositories;
|
||||
pub mod services;
|
||||
pub mod events;
|
||||
pub mod value_objects;
|
||||
|
||||
// Re-export commonly used types
|
||||
pub use entities::*;
|
||||
pub use errors::{DomainError, DomainResult};
|
||||
pub use events::DomainEvent;
|
||||
pub use ports::{Collection, IMediaProvider, IProviderRegistry, ProviderCapabilities, SeriesSummary, StreamingProtocol, StreamQuality};
|
||||
pub use repositories::*;
|
||||
pub use iptv::{generate_m3u, generate_xmltv};
|
||||
|
||||
Reference in New Issue
Block a user