zlayer_types/api/
groups.rs1use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5
6#[derive(Debug, Serialize, Deserialize, ToSchema)]
8pub struct CreateGroupRequest {
9 pub name: String,
11 #[serde(default)]
13 pub description: Option<String>,
14}
15
16#[derive(Debug, Serialize, Deserialize, ToSchema)]
18pub struct UpdateGroupRequest {
19 #[serde(default)]
21 pub name: Option<String>,
22 #[serde(default)]
24 pub description: Option<String>,
25}
26
27#[derive(Debug, Serialize, Deserialize, ToSchema)]
29pub struct AddMemberRequest {
30 pub user_id: String,
32}
33
34#[derive(Debug, Serialize, Deserialize, ToSchema)]
36pub struct GroupMembersResponse {
37 pub group_id: String,
39 pub members: Vec<String>,
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_create_group_request_deserialize() {
49 let json = r#"{"name": "developers"}"#;
50 let req: CreateGroupRequest = serde_json::from_str(json).unwrap();
51 assert_eq!(req.name, "developers");
52 assert!(req.description.is_none());
53 }
54
55 #[test]
56 fn test_create_group_request_with_description() {
57 let json = r#"{"name": "devs", "description": "Developer team"}"#;
58 let req: CreateGroupRequest = serde_json::from_str(json).unwrap();
59 assert_eq!(req.name, "devs");
60 assert_eq!(req.description.as_deref(), Some("Developer team"));
61 }
62
63 #[test]
64 fn test_update_group_request_partial() {
65 let req: UpdateGroupRequest = serde_json::from_str("{}").unwrap();
66 assert!(req.name.is_none());
67 assert!(req.description.is_none());
68 }
69
70 #[test]
71 fn test_add_member_request_deserialize() {
72 let json = r#"{"user_id": "u-123"}"#;
73 let req: AddMemberRequest = serde_json::from_str(json).unwrap();
74 assert_eq!(req.user_id, "u-123");
75 }
76}