From e8e7e07ffc3b51c43bab170f6f2c4776a580694f Mon Sep 17 00:00:00 2001 From: Claudio Schaad Date: Mon, 13 Apr 2026 20:00:18 +0200 Subject: [PATCH] feat: add Nextcloud CalDAV calendar sync Implements a provider-agnostic calendar sync feature with Nextcloud as the first alternative to Google Calendar. - Add ICalendarService interface and provider-agnostic API endpoints - Implement NextcloudCalendarService using CalDAV (Ical.Net) - Add CalendarEventBuilder to share event/transport logic across providers - Add Nextcloud sync button to the UI (Index page) - Centralise TargetFramework, Nullable and ImplicitUsings in Directory.Build.props (net9.0) - Add .worktrees to .gitignore and Docker/Nextcloud config docs Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 3 + Client/Pages/Index.razor | 12 +- Client/Pages/Index.razor.cs | 120 +- Client/ShiftScheduler.Client.csproj | 6 - Client/wwwroot/icons/F1_PF.png | Bin 0 -> 3420 bytes DOCKER_CONFIG.md | 16 +- Directory.Build.props | 7 + Server/Controllers/ShiftController.cs | 122 +- Server/Program.cs | 1 + Server/ShiftScheduler.Server.csproj | 7 - Server/appsettings.json | 6 + Services/CalendarEventBuilder.cs | 53 + Services/GoogleCalendarService.cs | 142 +- Services/ICalendarService.cs | 15 + Services/NextcloudCalendarService.cs | 232 +++ Services/ShiftScheduler.Services.csproj | 8 +- Shared/CalendarInfo.cs | 7 + Shared/GoogleCalendar.cs | 9 +- Shared/ShiftScheduler.Shared.csproj | 7 +- .../CalendarEventBuilderTests.cs | 69 + .../ShiftScheduler.Services.Tests.csproj | 7 +- .../2026-04-10-nextcloud-calendar-sync.md | 1614 +++++++++++++++++ ...26-04-10-nextcloud-calendar-sync-design.md | 139 ++ 23 files changed, 2316 insertions(+), 286 deletions(-) create mode 100644 Client/wwwroot/icons/F1_PF.png create mode 100644 Directory.Build.props create mode 100644 Services/CalendarEventBuilder.cs create mode 100644 Services/ICalendarService.cs create mode 100644 Services/NextcloudCalendarService.cs create mode 100644 Shared/CalendarInfo.cs create mode 100644 ShiftScheduler.Services.Tests/CalendarEventBuilderTests.cs create mode 100644 docs/superpowers/plans/2026-04-10-nextcloud-calendar-sync.md create mode 100644 docs/superpowers/specs/2026-04-10-nextcloud-calendar-sync-design.md diff --git a/.gitignore b/.gitignore index a0ae5fc..fcbd2ad 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,6 @@ nunit-*.xml # Configuration files (uncomment to avoid committing development configs) config/ **/config/ + +# Git worktrees +.worktrees/ diff --git a/Client/Pages/Index.razor b/Client/Pages/Index.razor index 751dccb..3cdd9e3 100644 --- a/Client/Pages/Index.razor +++ b/Client/Pages/Index.razor @@ -9,6 +9,7 @@
+
@@ -38,7 +39,7 @@