gewe_http/group/
manage.rs1use crate::client::GeweHttpClient;
2use gewe_core::{
3 CreateChatroomRequest, CreateChatroomResponse, DisbandChatroomRequest,
4 ModifyChatroomNameRequest, ModifyChatroomNickNameForSelfRequest, ModifyChatroomRemarkRequest,
5 QuitChatroomRequest,
6};
7use tracing::instrument;
8
9impl GeweHttpClient {
10 #[instrument(skip(self))]
11 pub async fn create_chatroom(
12 &self,
13 req: CreateChatroomRequest<'_>,
14 ) -> Result<CreateChatroomResponse, gewe_core::GeweError> {
15 let env = self
16 .post_api::<_, CreateChatroomResponse>("gewe/v2/api/group/createChatroom", &req)
17 .await?;
18 env.data.ok_or(gewe_core::GeweError::MissingData)
19 }
20
21 #[instrument(skip(self))]
22 pub async fn disband_chatroom(
23 &self,
24 req: DisbandChatroomRequest<'_>,
25 ) -> Result<(), gewe_core::GeweError> {
26 let _ = self
27 .post_api::<_, ()>("gewe/v2/api/group/disbandChatroom", &req)
28 .await?;
29 Ok(())
30 }
31
32 #[instrument(skip(self))]
33 pub async fn quit_chatroom(
34 &self,
35 req: QuitChatroomRequest<'_>,
36 ) -> Result<(), gewe_core::GeweError> {
37 let _ = self
38 .post_api::<_, ()>("gewe/v2/api/group/quitChatroom", &req)
39 .await?;
40 Ok(())
41 }
42
43 #[instrument(skip(self))]
44 pub async fn modify_chatroom_name(
45 &self,
46 req: ModifyChatroomNameRequest<'_>,
47 ) -> Result<(), gewe_core::GeweError> {
48 let _ = self
49 .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomName", &req)
50 .await?;
51 Ok(())
52 }
53
54 #[instrument(skip(self))]
55 pub async fn modify_chatroom_remark(
56 &self,
57 req: ModifyChatroomRemarkRequest<'_>,
58 ) -> Result<(), gewe_core::GeweError> {
59 let _ = self
60 .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomRemark", &req)
61 .await?;
62 Ok(())
63 }
64
65 #[instrument(skip(self))]
66 pub async fn modify_chatroom_nick_name_for_self(
67 &self,
68 req: ModifyChatroomNickNameForSelfRequest<'_>,
69 ) -> Result<(), gewe_core::GeweError> {
70 let _ = self
71 .post_api::<_, ()>("gewe/v2/api/group/modifyChatroomNickNameForSelf", &req)
72 .await?;
73 Ok(())
74 }
75}
76
77#[cfg(test)]
78mod tests {
79 use super::*;
80
81 #[test]
82 fn test_create_chatroom_request_serialization() {
83 let req = CreateChatroomRequest {
84 app_id: "test_app",
85 wxids: vec!["wxid1", "wxid2"],
86 };
87 let json = serde_json::to_string(&req).expect("Failed to serialize");
88 assert!(json.contains("appId"));
89 assert!(json.contains("wxids"));
90 assert!(json.contains("wxid1"));
91 }
92
93 #[test]
94 fn test_disband_chatroom_request_serialization() {
95 let req = DisbandChatroomRequest {
96 app_id: "test_app",
97 chatroom_id: "chatroom_123",
98 };
99 let json = serde_json::to_string(&req).expect("Failed to serialize");
100 assert!(json.contains("appId"));
101 assert!(json.contains("chatroomId"));
102 }
103
104 #[test]
105 fn test_quit_chatroom_request_serialization() {
106 let req = QuitChatroomRequest {
107 app_id: "test_app",
108 chatroom_id: "chatroom_123",
109 };
110 let json = serde_json::to_string(&req).expect("Failed to serialize");
111 assert!(json.contains("appId"));
112 assert!(json.contains("chatroomId"));
113 }
114
115 #[test]
116 fn test_modify_chatroom_name_request_serialization() {
117 let req = ModifyChatroomNameRequest {
118 app_id: "test_app",
119 chatroom_id: "chatroom_123",
120 chatroom_name: "New Group Name",
121 };
122 let json = serde_json::to_string(&req).expect("Failed to serialize");
123 assert!(json.contains("appId"));
124 assert!(json.contains("chatroomId"));
125 assert!(json.contains("New Group Name"));
126 }
127
128 #[test]
129 fn test_modify_chatroom_remark_request_serialization() {
130 let req = ModifyChatroomRemarkRequest {
131 app_id: "test_app",
132 chatroom_id: "chatroom_123",
133 chatroom_remark: "Group Remark",
134 };
135 let json = serde_json::to_string(&req).expect("Failed to serialize");
136 assert!(json.contains("appId"));
137 assert!(json.contains("chatroomRemark"));
138 }
139
140 #[test]
141 fn test_modify_chatroom_nick_name_for_self_request_serialization() {
142 let req = ModifyChatroomNickNameForSelfRequest {
143 app_id: "test_app",
144 chatroom_id: "chatroom_123",
145 nick_name: "My Nickname",
146 };
147 let json = serde_json::to_string(&req).expect("Failed to serialize");
148 assert!(json.contains("appId"));
149 assert!(json.contains("nickName"));
150 assert!(json.contains("My Nickname"));
151 }
152}