use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct CreateGroupRequest {
pub name: String,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct UpdateGroupRequest {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct AddMemberRequest {
pub user_id: String,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct GroupMembersResponse {
pub group_id: String,
pub members: Vec<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_create_group_request_deserialize() {
let json = r#"{"name": "developers"}"#;
let req: CreateGroupRequest = serde_json::from_str(json).unwrap();
assert_eq!(req.name, "developers");
assert!(req.description.is_none());
}
#[test]
fn test_create_group_request_with_description() {
let json = r#"{"name": "devs", "description": "Developer team"}"#;
let req: CreateGroupRequest = serde_json::from_str(json).unwrap();
assert_eq!(req.name, "devs");
assert_eq!(req.description.as_deref(), Some("Developer team"));
}
#[test]
fn test_update_group_request_partial() {
let req: UpdateGroupRequest = serde_json::from_str("{}").unwrap();
assert!(req.name.is_none());
assert!(req.description.is_none());
}
#[test]
fn test_add_member_request_deserialize() {
let json = r#"{"user_id": "u-123"}"#;
let req: AddMemberRequest = serde_json::from_str(json).unwrap();
assert_eq!(req.user_id, "u-123");
}
}