use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use ulid::Ulid;
use gradatum_core::author::AuthorRef;
use gradatum_core::identity::{NoteId, NoteVersion};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NoteHistoryEntry {
pub note_id: NoteId,
pub from_version: NoteVersion,
pub to_version: NoteVersion,
pub diff_text: String,
pub committed_at: DateTime<Utc>,
pub committed_by: AuthorRef,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub commit_message: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub correlation_id: Option<Ulid>,
}
impl NoteHistoryEntry {
pub fn new(
note_id: NoteId,
from_version: NoteVersion,
to_version: NoteVersion,
committed_by: AuthorRef,
commit_message: Option<String>,
) -> Self {
Self {
note_id,
from_version,
to_version,
diff_text: String::new(),
committed_at: Utc::now(),
committed_by,
commit_message,
correlation_id: None,
}
}
}