All day event

This commit is contained in:
2025-09-20 13:06:21 +02:00
parent 8ae429ac54
commit a69b8a9c55
3 changed files with 30 additions and 29 deletions

24
Cargo.lock generated
View File

@ -125,18 +125,6 @@ version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
[[package]]
name = "caldendar-api"
version = "0.1.0"
dependencies = [
"axum",
"chrono",
"icalendar",
"serde",
"serde_json",
"tokio",
]
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.2.37" version = "1.2.37"
@ -537,6 +525,18 @@ version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "recurring-event-api"
version = "0.1.0"
dependencies = [
"axum",
"chrono",
"icalendar",
"serde",
"serde_json",
"tokio",
]
[[package]] [[package]]
name = "rustc-demangle" name = "rustc-demangle"
version = "0.1.26" version = "0.1.26"

View File

@ -1,5 +1,5 @@
[package] [package]
name = "caldendar-api" name = "recurring-event-api"
version = "0.1.0" version = "0.1.0"
edition = "2024" edition = "2024"

View File

@ -8,6 +8,8 @@ use icalendar::{Calendar, Class, Component, Event, EventLike};
use serde::Deserialize; use serde::Deserialize;
use std::ops::Sub; use std::ops::Sub;
const TEXT_CALENDAR: &'static str = "text/calendar";
#[derive(Deserialize)] #[derive(Deserialize)]
enum Recurring { enum Recurring {
Daily, Daily,
@ -81,8 +83,6 @@ async fn get_calendar(Query(query): Query<EventQuery>) -> impl IntoResponse {
)) ))
} }
const TEXT_CALENDAR: &'static str = "text/calendar";
async fn get_ics(Query(query): Query<EventQuery>) -> impl IntoResponse { async fn get_ics(Query(query): Query<EventQuery>) -> impl IntoResponse {
let start = query.start_date_time; let start = query.start_date_time;
let end = query let end = query
@ -97,13 +97,15 @@ async fn get_ics(Query(query): Query<EventQuery>) -> impl IntoResponse {
query.avoid_weekends.unwrap_or(false), query.avoid_weekends.unwrap_or(false),
) )
.into_iter() .into_iter()
.for_each(|date| { .for_each(|date_time| {
calendar.push( let mut event = Event::new();
Event::new() if query.all_day {
.summary(&query.title) event.all_day(date_time.date());
.starts(date) } else {
.class(Class::Confidential), event.starts(date_time);
); };
event.summary(&query.title).class(Class::Private);
calendar.push(event);
}); });
Response::builder() Response::builder()
@ -127,16 +129,15 @@ fn get_dates(
Recurring::Weeky => todo!(), Recurring::Weeky => todo!(),
Recurring::BiWeekly => todo!(), Recurring::BiWeekly => todo!(),
Recurring::Monthly => { Recurring::Monthly => {
let new_date = baseline.checked_add_months(Months::new(1)).unwrap(); baseline = baseline.checked_add_months(Months::new(1)).unwrap();
baseline = new_date;
if let true = avoid_weekends { if let true = avoid_weekends {
match new_date.weekday() { match baseline.weekday() {
Weekday::Sat => new_date.sub(TimeDelta::days(1)), Weekday::Sat => baseline.sub(TimeDelta::days(1)),
Weekday::Sun => new_date.sub(TimeDelta::days(2)), Weekday::Sun => baseline.sub(TimeDelta::days(2)),
_ => new_date, _ => baseline,
} }
} else { } else {
new_date baseline
} }
} }
Recurring::Quarterly => todo!(), Recurring::Quarterly => todo!(),