diff options
| author | Mikkel Thestrup <mikkel_thestrup@mithe.dk> | 2025-12-09 14:52:58 +0100 |
|---|---|---|
| committer | Mikkel Thestrup <mikkel_thestrup@mithe.dk> | 2025-12-09 17:17:56 +0100 |
| commit | 147125358b66c2bf097ed11f82042e220a730090 (patch) | |
| tree | 2b6957d01a1afb0553996e916faea5c646f5cc6e /src/domain/recurrence.rs | |
| parent | 4b1074193991a510fd2129513d5fcb7c6da933d2 (diff) | |
| download | kal-master.tar.gz kal-master.zip | |
- 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.rs | 36 |
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 }) + } +} |