191 lines
3.8 KiB
Plaintext
191 lines
3.8 KiB
Plaintext
@startuml "Backend Klassendiagramm"
|
|
|
|
scale 0.9
|
|
skinparam dpi 600
|
|
skinparam backgroundColor #FFAB40
|
|
|
|
skinparam packageStyle rectangle
|
|
skinparam classAttributeIconSize 0
|
|
skinparam classFontSize 11
|
|
skinparam defaultFontSize 10
|
|
|
|
top to bottom direction
|
|
|
|
title Backend Architektur - Klassendiagramm
|
|
|
|
package "Controller Layer" #ADD8E6 {
|
|
class AuthController {
|
|
' +login()
|
|
' +register()
|
|
' +refresh()
|
|
' +logout()
|
|
}
|
|
|
|
class ChatController {
|
|
' +sendMessage()
|
|
' +confirmEvent()
|
|
' +rejectEvent()
|
|
' +getConversations()
|
|
' +getConversation()
|
|
}
|
|
|
|
class EventController {
|
|
' +create()
|
|
' +getById()
|
|
' +getAll()
|
|
' +getByDateRange()
|
|
' +update()
|
|
' +delete()
|
|
}
|
|
|
|
class AuthMiddleware {
|
|
' +authenticate()
|
|
}
|
|
}
|
|
|
|
package "Service Layer" #90EE90 {
|
|
package "Interfaces" {
|
|
interface AIProvider {
|
|
' +processMessage()
|
|
}
|
|
|
|
interface UserRepository {
|
|
' +findById()
|
|
' +findByEmail()
|
|
' +create()
|
|
}
|
|
|
|
interface EventRepository {
|
|
' +findById()
|
|
' +findByUserId()
|
|
' +findByDateRange()
|
|
' +create()
|
|
' +update()
|
|
' +delete()
|
|
}
|
|
|
|
interface ChatRepository {
|
|
' +getConversationsByUser()
|
|
' +createConversation()
|
|
' +getMessages()
|
|
' +createMessage()
|
|
}
|
|
}
|
|
|
|
class AuthService {
|
|
' -userRepo: UserRepository
|
|
' +login()
|
|
' +register()
|
|
}
|
|
|
|
class ChatService {
|
|
' -chatRepo: ChatRepository
|
|
' -eventRepo: EventRepository
|
|
' -aiProvider: AIProvider
|
|
' +processMessage()
|
|
' +confirmEvent()
|
|
' +rejectEvent()
|
|
' +getConversations()
|
|
' +getConversation()
|
|
}
|
|
|
|
class EventService {
|
|
' -eventRepo: EventRepository
|
|
' +create()
|
|
' +getById()
|
|
' +getAll()
|
|
' +getByDateRange()
|
|
' +update()
|
|
' +delete()
|
|
}
|
|
}
|
|
|
|
package "AI Implementations" #FFA07A {
|
|
class ClaudeAdapter implements AIProvider {
|
|
' -apiKey: string
|
|
' +processMessage()
|
|
}
|
|
}
|
|
|
|
package "Data Access Implementations" #FFD700 {
|
|
class MongoUserRepository implements UserRepository {
|
|
' -model: UserModel
|
|
}
|
|
|
|
class MongoEventRepository implements EventRepository {
|
|
' -model: EventModel
|
|
}
|
|
|
|
class MongoChatRepository implements ChatRepository {
|
|
' -model: ChatModel
|
|
}
|
|
}
|
|
|
|
package "Models" #D3D3D3 {
|
|
class User <<Entity>> {
|
|
' +id: string
|
|
' +email: string
|
|
' +displayName: string
|
|
}
|
|
|
|
class CalendarEvent <<Entity>> {
|
|
' +id: string
|
|
' +userId: string
|
|
' +title: string
|
|
' +startTime: Date
|
|
' +endTime: Date
|
|
' +note?: string
|
|
}
|
|
|
|
class ChatMessage <<Entity>> {
|
|
' +id: string
|
|
' +sender: string
|
|
' +content: string
|
|
' +proposedEvent?: ProposedEvent
|
|
}
|
|
}
|
|
|
|
package "Utils" #DDA0DD {
|
|
class JWT {
|
|
' +signToken()
|
|
' +verifyToken()
|
|
}
|
|
|
|
class Password {
|
|
' +hash()
|
|
' +compare()
|
|
}
|
|
|
|
class RecurrenceExpander {
|
|
' +expandRecurringEvents()
|
|
}
|
|
|
|
class EventFormatters {
|
|
' +getWeeksOverview()
|
|
' +getMonthOverview()
|
|
}
|
|
}
|
|
|
|
' Controller -> Service
|
|
AuthController --> AuthService
|
|
ChatController --> ChatService
|
|
EventController --> EventService
|
|
AuthMiddleware --> JWT
|
|
|
|
' Service -> Interfaces (intern)
|
|
AuthService --> UserRepository
|
|
ChatService --> ChatRepository
|
|
ChatService --> EventRepository
|
|
ChatService --> AIProvider
|
|
EventService --> EventRepository
|
|
|
|
' Auth uses Utils
|
|
AuthService --> JWT
|
|
AuthService --> Password
|
|
|
|
' Event/Chat uses Utils
|
|
EventService --> RecurrenceExpander
|
|
ChatService --> EventFormatters
|
|
|
|
@enduml
|