use crate::domain::model::decision_record::DecisionRecordEdit;
use crate::domain::model::record_ref::DecisionRecordRef;
use crate::domain::model::title::Title;
use crate::domain::usecases::decision_record::DecisionRecordRepository;
use crate::domain::usecases::edit::dr::commit_dr_edits;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EditTitleOutcome {
Updated,
NoOp,
}
pub fn edit_decision_record_title(
repo: &dyn DecisionRecordRepository,
id: &DecisionRecordRef,
new_title: Title,
) -> anyhow::Result<EditTitleOutcome> {
let record = repo
.find_by_id(id)?
.ok_or_else(|| anyhow::anyhow!("record {id} not found"))?;
if record.title == new_title {
return Ok(EditTitleOutcome::NoOp);
}
commit_dr_edits(
repo,
vec![DecisionRecordEdit::SetTitle {
record: id.clone(),
title: new_title,
}],
)?;
Ok(EditTitleOutcome::Updated)
}