@startuml "Frontend Klassendiagramm" scale 0.9 skinparam dpi 600 skinparam backgroundColor #FFAB40 skinparam packageStyle rectangle skinparam classAttributeIconSize 0 skinparam classFontSize 10 skinparam defaultFontSize 9 skinparam wrapWidth 100 skinparam nodesep 30 skinparam ranksep 30 top to bottom direction title Frontend (Expo React Native) ' ===== SCREENS ===== package "Screens" #87CEEB { class LoginScreen class RegisterScreen class CalendarScreen class ChatScreen class EventDetailScreen class NoteScreen } ' ===== COMPONENTS ===== package "Components" #FFA07A { class BaseBackground class Header class EventCardBase class EventCard class ProposedEventCard class EventConfirmDialog } ' ===== SERVICES ===== package "Services" #90EE90 { class ApiClient { +get() +post() +put() +delete() } class AuthService { +login() +register() +logout() +refresh() } class EventService { +getAll() +getById() +getByDateRange() +create() +update() +delete() } class ChatService { +sendMessage() +confirmEvent() +rejectEvent() +getConversations() +getConversation() } } ' ===== STORES ===== package "Stores" #FFD700 { class AuthStore { ' +user ' +token ' +isAuthenticated ' +login() ' +logout() ' +setToken() } class EventsStore { ' +events ' +setEvents() ' +addEvent() ' +updateEvent() ' +deleteEvent() } class ChatStore { ' +messages ' +addMessage() ' +updateMessage() ' +clearMessages() } } ' ===== MODELS ===== package "Models (shared)" #D3D3D3 { class User class CalendarEvent class ChatMessage } ' ===== RELATIONSHIPS ===== ' Screens -> Services LoginScreen --> AuthService CalendarScreen --> EventService ChatScreen --> ChatService NoteScreen --> EventService ' Screens -> Components CalendarScreen --> EventCard ChatScreen --> ProposedEventCard ChatScreen --> EventConfirmDialog EventCard --> EventCardBase ProposedEventCard --> EventCardBase ' Services -> ApiClient AuthService --> ApiClient EventService --> ApiClient ChatService --> ApiClient ' Services/Screens -> Stores AuthService --> AuthStore EventService --> EventsStore ChatScreen --> ChatStore @enduml