Skip to main content

privchat_protocol/rpc/group/
approval.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路由: `group/approval/list`
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct GroupApprovalListRequest {
26    /// 群组ID
27    pub group_id: u64,
28    /// 操作者ID
29    pub operator_id: u64,
30}
31
32/// 处理群组审批请求
33///
34/// RPC路由: `group/approval/handle`
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct GroupApprovalHandleRequest {
37    /// 请求ID
38    pub request_id: String,
39    /// 操作者ID
40    pub operator_id: u64,
41    /// 操作(approve/reject)
42    pub action: String,
43    /// 拒绝原因(可选)
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub reject_reason: Option<String>,
46}
47
48/// 获取群组审批列表响应
49///
50/// RPC路由: `group/approval/list`
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct GroupApprovalMethodMemberInvite {
53    pub inviter_id: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct GroupApprovalMethodQrCode {
58    pub qr_code_id: String,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct GroupApprovalMethod {
63    #[serde(rename = "MemberInvite", skip_serializing_if = "Option::is_none")]
64    pub member_invite: Option<GroupApprovalMethodMemberInvite>,
65    #[serde(rename = "QRCode", skip_serializing_if = "Option::is_none")]
66    pub qr_code: Option<GroupApprovalMethodQrCode>,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct GroupApprovalItem {
71    pub request_id: String,
72    pub user_id: u64,
73    pub method: GroupApprovalMethod,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub message: Option<String>,
76    pub created_at: String,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub expires_at: Option<String>,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct GroupApprovalListResponse {
83    pub group_id: String,
84    #[serde(default, alias = "approvals")]
85    pub requests: Vec<GroupApprovalItem>,
86    pub total: usize,
87}
88
89/// 处理群组审批响应
90///
91/// RPC路由: `group/approval/handle`
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct GroupApprovalHandleResponse {
94    pub success: bool,
95    pub request_id: String,
96    pub action: String,
97    pub group_id: u64,
98    pub user_id: u64,
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub reject_reason: Option<String>,
101    pub message: String,
102    pub handled_at: String,
103}