sqlx_ledger/journal/
entity.rs1use chrono::{DateTime, Utc};
2use derive_builder::Builder;
3
4use crate::primitives::*;
5
6pub struct Journal {
8 pub id: JournalId,
9 pub name: String,
10 pub description: Option<String>,
11 pub status: Status,
12 pub version: u32,
13 pub modified_at: DateTime<Utc>,
14 pub created_at: DateTime<Utc>,
15}
16
17#[derive(Debug, Builder)]
20pub struct NewJournal {
21 #[builder(setter(into))]
22 pub id: JournalId,
23 #[builder(setter(into))]
24 pub(super) name: String,
25 #[builder(setter(strip_option, into), default)]
26 pub(super) description: Option<String>,
27 #[builder(default)]
28 pub(super) status: Status,
29}
30
31impl NewJournal {
32 pub fn builder() -> NewJournalBuilder {
33 let mut builder = NewJournalBuilder::default();
34 builder.id(JournalId::new());
35 builder
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn it_builds() {
45 let new_journal = NewJournal::builder().name("name").build().unwrap();
46 assert_eq!(new_journal.name, "name");
47 assert_eq!(new_journal.description, None);
48 assert_eq!(new_journal.status, Status::Active);
49 }
50
51 #[test]
52 fn fails_when_mandatory_fields_are_missing() {
53 let new_journal = NewJournal::builder().build();
54 assert!(new_journal.is_err());
55 }
56}