aboutsummaryrefslogtreecommitdiff
path: root/src/domain/recurrence.rs
diff options
context:
space:
mode:
authorMikkel Thestrup <mikkel_thestrup@mithe.dk>2025-12-09 14:52:58 +0100
committerMikkel Thestrup <mikkel_thestrup@mithe.dk>2025-12-09 17:17:56 +0100
commit147125358b66c2bf097ed11f82042e220a730090 (patch)
tree2b6957d01a1afb0553996e916faea5c646f5cc6e /src/domain/recurrence.rs
parent4b1074193991a510fd2129513d5fcb7c6da933d2 (diff)
downloadkal-147125358b66c2bf097ed11f82042e220a730090.tar.gz
kal-147125358b66c2bf097ed11f82042e220a730090.zip
feat(domain): Add initial domain models for calendar, event, and recurrenceHEADmaster
- Added `calendar.rs` with Calendar entity and builder - Added `event.rs` with Event model and builder - Added `recurrence.rs` for recurrence rules - Added `mod.rs` to expose domain module structure These files establish the core domain layer structures for future business logic.
Diffstat (limited to 'src/domain/recurrence.rs')
-rw-r--r--src/domain/recurrence.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/domain/recurrence.rs b/src/domain/recurrence.rs
new file mode 100644
index 0000000..807df4b
--- /dev/null
+++ b/src/domain/recurrence.rs
@@ -0,0 +1,36 @@
+use chrono::{DateTime, Utc};
+use getset::Getters;
+
+#[derive(Clone, Debug, Getters)]
+#[getset(get = "pub")]
+pub struct RecurrenceRule {
+ frequency: Frequency,
+ interval: u32,
+ end_date: Option<DateTime<Utc>>
+}
+
+#[derive(Clone, Debug)]
+pub enum Frequency {
+ DAILY,
+ WEEKLY,
+ MONTHLY,
+ YEARLY
+}
+
+impl RecurrenceRule {
+ pub fn new(
+ frequency: Frequency,
+ interval: u32,
+ end_date: Option<DateTime<Utc>>
+ ) -> Result<Self, String> {
+ let now = Utc::now();
+
+ if let Some(end) = end_date {
+ if now >= end {
+ return Err("End date has already passed".to_string());
+ }
+ }
+
+ Ok(Self { frequency, interval, end_date })
+ }
+}