use chrono::{DateTime, Utc}; use getset::Getters; use crate::domain::value_objects::CalendarId; #[derive(Debug, Clone, Getters)] pub struct Calendar { #[getset(get = "pub")] id: CalendarId, #[getset(get = "pub")] name: String, #[getset(get = "pub")] description: Option, #[getset(get = "pub")] is_archived: bool, #[getset(get = "pub")] created_at: DateTime, #[getset(get = "pub")] updated_at: DateTime, } impl Calendar { pub fn new(name: String, description: Option) -> Self { let now = Utc::now(); Self { id: CalendarId::new(), name, description, is_archived: false, created_at: now, updated_at: now, } } pub fn with_id( id: CalendarId, name: String, description: Option, is_archived: bool, created_at: DateTime, updated_at: DateTime, ) -> Self { Self { id, name, description, is_archived, created_at, updated_at, } } pub fn archive(&mut self) { self.is_archived = true; self.touch(); } pub fn unarchive(&mut self) { self.is_archived = false; self.touch(); } pub fn update_name(&mut self, name: String) { self.name = name; self.touch(); } pub fn update_description(&mut self, description: Option) { self.description = description; self.touch(); } pub fn touch(&mut self) { self.updated_at = Utc::now(); } }