@startuml hide circle skinparam linetype ortho entity users { * id : BIGSERIAL <> -- email : VARCHAR password : VARCHAR role : VARCHAR unique_user_id : CHAR(12) display_name : VARCHAR fcm_token : VARCHAR created_at : TIMESTAMP } entity pairing_relations { * id : BIGSERIAL <> -- guardian_id : BIGINT <> user_id : BIGINT <> status : VARCHAR invited_at : TIMESTAMP responded_at : TIMESTAMP } entity activity_logs { * id : BIGSERIAL <> -- user_id : BIGINT <> log_type : VARCHAR description : TEXT metadata : JSONB created_at : TIMESTAMP } entity obstacle_logs { * id : BIGSERIAL <> -- user_id : BIGINT <> label : VARCHAR confidence : FLOAT direction : VARCHAR estimated_dist : VARCHAR lat : DOUBLE lng : DOUBLE } entity location_history { * id : BIGSERIAL <> -- user_id : BIGINT <> lat : DOUBLE lng : DOUBLE accuracy : FLOAT speed : FLOAT heading : FLOAT } entity guardian_notifications { * id : BIGSERIAL <> -- guardian_id : BIGINT <> user_id : BIGINT <> notif_type : VARCHAR content : TEXT is_read : BOOLEAN } entity sos_events { * id : BIGSERIAL <> -- user_id : BIGINT <> trigger_type : VARCHAR lat : DOUBLE lng : DOUBLE status : VARCHAR } entity user_settings entity ai_configs entity voice_command_configs entity hardware_shortcuts entity geofence_configs entity refresh_tokens users ||--o{ pairing_relations : guardian_id users ||--o{ pairing_relations : user_id users ||--o{ activity_logs users ||--o{ obstacle_logs users ||--o{ location_history users ||--o{ guardian_notifications : guardian_id users ||--o{ guardian_notifications : user_id users ||--o{ sos_events users ||--o| user_settings users ||--o{ refresh_tokens pairing_relations ||--o| ai_configs pairing_relations ||--o{ voice_command_configs pairing_relations ||--o{ hardware_shortcuts pairing_relations ||--o| geofence_configs @enduml