feat: add CalDAV synchronization with automatic sync
- Add CaldavService with tsdav/ical.js for CalDAV server communication - Add CaldavController, CaldavRepository, and caldav routes - Add client-side CaldavConfigService with sync(), config CRUD - Add CalDAV settings UI with config load/save in settings screen - Sync on login, auto-login (AuthGuard), periodic timer (calendar), and sync button - Push single events to CalDAV on server-side create/update/delete - Push all events to CalDAV after chat event confirmation - Refactor ChatService to use EventService instead of direct EventRepository - Rename CalDav/calDav to Caldav/caldav for consistent naming - Add Radicale Docker setup for local CalDAV testing - Update PlantUML diagrams and CLAUDE.md with CalDAV architecture
This commit is contained in:
@@ -30,6 +30,8 @@ package "Controller Layer" #ADD8E6 {
|
||||
}
|
||||
|
||||
class EventController {
|
||||
' -pushToCaldav()
|
||||
' -deleteFromCaldav()
|
||||
' +create()
|
||||
' +getById()
|
||||
' +getAll()
|
||||
@@ -38,6 +40,15 @@ package "Controller Layer" #ADD8E6 {
|
||||
' +delete()
|
||||
}
|
||||
|
||||
class CaldavController {
|
||||
' +saveConfig()
|
||||
' +loadConfig()
|
||||
' +deleteConfig()
|
||||
' +pullEvents()
|
||||
' +pushEvents()
|
||||
' +pushEvent()
|
||||
}
|
||||
|
||||
class AuthMiddleware {
|
||||
' +authenticate()
|
||||
}
|
||||
@@ -59,9 +70,12 @@ package "Service Layer" #90EE90 {
|
||||
' +findById()
|
||||
' +findByUserId()
|
||||
' +findByDateRange()
|
||||
' +findByCaldavUUID()
|
||||
' +searchByTitle()
|
||||
' +create()
|
||||
' +update()
|
||||
' +delete()
|
||||
' +addExceptionDate()
|
||||
}
|
||||
|
||||
interface ChatRepository {
|
||||
@@ -69,6 +83,14 @@ package "Service Layer" #90EE90 {
|
||||
' +createConversation()
|
||||
' +getMessages()
|
||||
' +createMessage()
|
||||
' +updateProposalResponse()
|
||||
' +updateProposalEvent()
|
||||
}
|
||||
|
||||
interface CaldavRepository {
|
||||
' +findByUserId()
|
||||
' +createOrUpdate()
|
||||
' +deleteByUserId()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +102,7 @@ package "Service Layer" #90EE90 {
|
||||
|
||||
class ChatService {
|
||||
' -chatRepo: ChatRepository
|
||||
' -eventRepo: EventRepository
|
||||
' -eventService: EventService
|
||||
' -aiProvider: AIProvider
|
||||
' +processMessage()
|
||||
' +confirmEvent()
|
||||
@@ -95,13 +117,29 @@ package "Service Layer" #90EE90 {
|
||||
' +getById()
|
||||
' +getAll()
|
||||
' +getByDateRange()
|
||||
' +searchByTitle()
|
||||
' +findByCaldavUUID()
|
||||
' +update()
|
||||
' +delete()
|
||||
' +deleteRecurring()
|
||||
}
|
||||
|
||||
class CaldavService {
|
||||
' -caldavRepo: CaldavRepository
|
||||
' -eventService: EventService
|
||||
' +connect()
|
||||
' +pullEvents()
|
||||
' +pushEvent()
|
||||
' +pushAll()
|
||||
' +deleteEvent()
|
||||
' +getConfig()
|
||||
' +saveConfig()
|
||||
' +deleteConfig()
|
||||
}
|
||||
}
|
||||
|
||||
package "AI Implementations" #FFA07A {
|
||||
class ClaudeAdapter implements AIProvider {
|
||||
class GPTAdapter implements AIProvider {
|
||||
' -apiKey: string
|
||||
' +processMessage()
|
||||
}
|
||||
@@ -119,6 +157,10 @@ package "Data Access Implementations" #FFD700 {
|
||||
class MongoChatRepository implements ChatRepository {
|
||||
' -model: ChatModel
|
||||
}
|
||||
|
||||
class MongoCaldavRepository implements CaldavRepository {
|
||||
' -model: CaldavConfigModel
|
||||
}
|
||||
}
|
||||
|
||||
package "Models" #D3D3D3 {
|
||||
@@ -169,15 +211,20 @@ package "Utils" #DDA0DD {
|
||||
' Controller -> Service
|
||||
AuthController --> AuthService
|
||||
ChatController --> ChatService
|
||||
ChatController --> CaldavService
|
||||
EventController --> EventService
|
||||
EventController --> CaldavService
|
||||
CaldavController --> CaldavService
|
||||
AuthMiddleware --> JWT
|
||||
|
||||
' Service -> Interfaces (intern)
|
||||
AuthService --> UserRepository
|
||||
ChatService --> ChatRepository
|
||||
ChatService --> EventRepository
|
||||
ChatService --> EventService
|
||||
ChatService --> AIProvider
|
||||
EventService --> EventRepository
|
||||
CaldavService --> CaldavRepository
|
||||
CaldavService --> EventService
|
||||
|
||||
' Auth uses Utils
|
||||
AuthService --> JWT
|
||||
|
||||
Reference in New Issue
Block a user