Skip to main content

privchat_protocol/rpc/account/
user.rs

1// Copyright 2025 Shanghai Boyu Information Technology Co., Ltd.
2// https://privchat.dev
3//
4// Author: zoujiaqing <zoujiaqing@gmail.com>
5//
6// Licensed under the Apache License, Version 2.0 (the "License");
7// you may not use this file except in compliance with the License.
8// You may obtain a copy of the License at
9//
10//     http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS,
14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15// See the License for the specific language governing permissions and
16// limitations under the License.
17
18/// 用户信息相关 RPC
19use serde::{Deserialize, Serialize};
20
21/// 获取用户详情请求
22///
23/// RPC路由: `account/user/detail`
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct AccountUserDetailRequest {
26    /// 目标用户ID
27    pub target_user_id: u64,
28    /// 来源
29    pub source: String,
30    /// 来源ID
31    pub source_id: String,
32
33    /// 当前用户ID(服务器端填充,客户端不可设置)
34    #[serde(skip_deserializing, default)]
35    pub user_id: u64,
36}
37
38/// 生成用户分享卡片请求
39///
40/// RPC路由: `account/user/share_card`
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct AccountUserShareCardRequest {
43    /// 要分享的目标用户ID
44    pub target_user_id: u64,
45    /// 接收者ID
46    pub receiver_id: u64,
47    /// 过期时间(秒)(可选)
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub expire_seconds: Option<u64>,
50
51    /// 分享者ID(服务器端填充,客户端不可设置)
52    #[serde(skip_deserializing, default)]
53    pub sharer_id: u64,
54}
55
56/// 更新用户信息请求
57///
58/// RPC路由: `account/user/update`
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct AccountUserUpdateRequest {
61    /// 显示名称(可选)
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub display_name: Option<String>,
64    /// 头像URL(可选)
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub avatar_url: Option<String>,
67    /// 个人简介(可选)
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub bio: Option<String>,
70
71    /// 用户ID(服务器端填充,客户端不可设置)
72    #[serde(skip_deserializing, default)]
73    pub user_id: u64,
74}
75
76/// 获取用户详情响应
77///
78/// RPC路由: `account/user/detail`
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct AccountUserDetailResponse {
81    pub user_id: u64,
82    pub username: String,
83    pub nickname: String,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub avatar_url: Option<String>,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub phone: Option<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub email: Option<String>,
90    pub user_type: i16,
91    pub is_friend: bool,
92    pub can_send_message: bool,
93    pub source_type: String,
94    pub source_id: String,
95}
96
97/// 更新用户信息响应
98///
99/// RPC路由: `account/user/update`
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct AccountUserUpdateResponse {
102    pub status: String,
103    pub action: String,
104    pub timestamp: String,
105}
106
107/// 生成用户分享卡片响应
108///
109/// RPC路由: `account/user/share_card`
110#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct AccountUserShareCardResponse {
112    pub share_id: String,
113    pub target_user_id: u64,
114    pub receiver_id: u64,
115    pub created_at: String,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub share_key: Option<String>,
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub share_url: Option<String>,
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub expire_at: Option<String>,
122}