@startuml skinparam classAttributeIconSize 0 class User { +Long id +String email +String role +String uniqueUserId +String displayName +String fcmToken } class PairingRelation { +Long id +PairingStatus status +LocalDateTime invitedAt +LocalDateTime respondedAt } class LocationHistory class ActivityLog class ObstacleLog class GuardianNotification class SosEvent class UserSettings class AiConfig class VoiceCommandConfig class HardwareShortcut class GeofenceConfig class RefreshToken User "1" -- "0..*" LocationHistory User "1" -- "0..*" ActivityLog User "1" -- "0..*" ObstacleLog User "1" -- "0..*" SosEvent User "1" -- "0..1" UserSettings User "1" -- "0..*" RefreshToken User "1" -- "0..*" PairingRelation : guardian User "1" -- "0..*" PairingRelation : user PairingRelation "1" -- "0..*" GuardianNotification PairingRelation "1" -- "0..1" AiConfig PairingRelation "1" -- "0..*" VoiceCommandConfig PairingRelation "1" -- "0..*" HardwareShortcut PairingRelation "1" -- "0..1" GeofenceConfig class AuthController class PairingController class UserController class GuardianController class CallController class AuthService class PairingService class LocationService class NotificationService class SosService class AgoraTokenService class FcmService class LocationBroadcaster AuthController --> AuthService PairingController --> PairingService UserController --> LocationService UserController --> SosService GuardianController --> NotificationService GuardianController --> SosService CallController --> AgoraTokenService CallController --> FcmService LocationService --> LocationBroadcaster NotificationService --> LocationBroadcaster SosService --> LocationBroadcaster @enduml