@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
