Skip to main content

agentlink_core/protocols/
user.rs

1//! User Protocol Types
2
3use serde::{Deserialize, Serialize};
4
5/// 用户信息
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct User {
8    pub id: String,
9    #[serde(default)]
10    pub linkid: String,
11    pub nickname: String,
12    pub avatar: Option<String>,
13    pub status: String,
14    /// 在线状态(MQTT 推送字段)
15    #[serde(default)]
16    pub online: bool,
17    /// 设备类型(MQTT 推送字段)
18    #[serde(default)]
19    pub device_type: Option<String>,
20    /// 手机号是否已验证
21    #[serde(default)]
22    pub phone_verified: bool,
23    pub created_at: String,
24    pub updated_at: String,
25    #[serde(default)]
26    pub login_methods: Vec<UserLoginMethod>,
27}
28
29/// 用户登录方式
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct UserLoginMethod {
32    pub id: String,
33    pub user_id: String,
34    pub login_type: String,
35    pub identifier: String,
36    pub verified: bool,
37    pub is_primary: bool,
38    pub created_at: String,
39    pub updated_at: String,
40}
41
42/// 用户隐私设置
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct UserPrivacySettings {
45    pub user_id: String,
46    pub allow_friend_request: bool,
47    pub require_verification: bool,
48    pub friend_request_question: Option<String>,
49    pub moments_visibility: String,
50    pub allow_stranger_view_moments: bool,
51    pub show_online_status: bool,
52    pub show_phone_to: String,
53    pub find_by_phone: bool,
54    pub allow_search_by_linkid: bool,
55    pub show_qrcode: bool,
56    pub share_location: bool,
57    pub created_at: String,
58    pub updated_at: String,
59}
60
61/// 更新隐私设置请求
62#[derive(Debug, Clone, Serialize)]
63pub struct UpdatePrivacySettingsRequest {
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub allow_friend_request: Option<bool>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub require_verification: Option<bool>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub friend_request_question: Option<String>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub moments_visibility: Option<String>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub allow_stranger_view_moments: Option<bool>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub show_online_status: Option<bool>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub show_phone_to: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub find_by_phone: Option<bool>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub allow_search_by_linkid: Option<bool>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub show_qrcode: Option<bool>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub share_location: Option<bool>,
86}
87
88/// 黑名单条目
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct BlacklistEntry {
91    pub id: String,
92    pub user_id: String,
93    pub blocked_user_id: String,
94    pub reason: Option<String>,
95    pub is_mutual: bool,
96    pub created_at: String,
97    pub updated_at: String,
98    pub blocked_user: Option<User>,
99}
100
101/// 添加到黑名单请求
102#[derive(Debug, Clone, Serialize)]
103pub struct AddToBlacklistRequest {
104    pub blocked_user_id: String,
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub reason: Option<String>,
107}