application: schedule bounded context
This commit is contained in:
38
crates/application/src/schedule/generate.rs
Normal file
38
crates/application/src/schedule/generate.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use chrono::Utc;
|
||||
|
||||
use domain::events::DomainEvent;
|
||||
use domain::models::GeneratedSchedule;
|
||||
use domain::value_objects::ChannelId;
|
||||
use domain::DomainResult;
|
||||
|
||||
use super::commands::GenerateScheduleCommand;
|
||||
use super::deps::ScheduleDeps;
|
||||
|
||||
/// Generate a new 7-day schedule for a channel.
|
||||
///
|
||||
/// Delegates the heavy lifting to `ScheduleEngineService::generate_schedule`,
|
||||
/// then publishes a `ScheduleGenerated` domain event.
|
||||
pub async fn execute(
|
||||
deps: &ScheduleDeps,
|
||||
cmd: GenerateScheduleCommand,
|
||||
) -> DomainResult<GeneratedSchedule> {
|
||||
let channel_id = ChannelId::from(cmd.channel_id);
|
||||
|
||||
let schedule = deps
|
||||
.schedule_engine
|
||||
.generate_schedule(channel_id, Utc::now())
|
||||
.await?;
|
||||
|
||||
deps.event_publisher
|
||||
.publish(DomainEvent::ScheduleGenerated {
|
||||
channel_id,
|
||||
schedule_id: schedule.id(),
|
||||
})
|
||||
.await?;
|
||||
|
||||
Ok(schedule)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "tests/generate.rs"]
|
||||
mod tests;
|
||||
Reference in New Issue
Block a user