use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use super::shared::{CustomData, SortParamRequest, Timestamp};
#[derive(Debug, Clone, Default, Serialize)]
pub struct UserRequest {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invisible: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub teams: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom: Option<CustomData>,
#[serde(skip_serializing_if = "Option::is_none")]
pub teams_role: Option<HashMap<String, String>>,
}
impl UserRequest {
pub fn new(id: impl Into<String>) -> Self {
Self {
id: id.into(),
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct UserResponse {
pub id: String,
pub role: String,
pub banned: bool,
pub online: bool,
pub invisible: bool,
pub language: String,
pub shadow_banned: bool,
pub created_at: Timestamp,
pub updated_at: Timestamp,
pub blocked_user_ids: Vec<String>,
pub teams: Vec<String>,
pub custom: CustomData,
pub name: Option<String>,
pub image: Option<String>,
pub last_active: Option<Timestamp>,
pub deactivated_at: Option<Timestamp>,
pub deleted_at: Option<Timestamp>,
pub teams_role: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct UpdateUsersRequest {
pub users: HashMap<String, UserRequest>,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct UpdateUsersResponse {
pub duration: String,
pub membership_deletion_task_id: String,
pub users: HashMap<String, UserResponse>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct QueryUsersPayload {
pub filter_conditions: CustomData,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<Vec<SortParamRequest>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub presence: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct QueryUsersResponse {
pub duration: String,
pub users: Vec<UserResponse>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct UpdateUserPartialRequest {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub set: Option<CustomData>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unset: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct UpdateUsersPartialRequest {
pub users: Vec<UpdateUserPartialRequest>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct DeleteUsersRequest {
pub user_ids: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub calls: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub messages: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversations: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub files: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_call_owner_id: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(default)]
pub struct DeleteUsersResponse {
pub duration: String,
pub task_id: String,
}