use serde::{Deserialize, Serialize};
use super::message::Message;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Conversation {
pub id: String,
#[serde(rename = "type")]
pub conversation_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_members: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_by_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_msg_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_msg_id: Option<String>,
#[serde(default = "default_timestamp")]
pub created_at: String,
#[serde(default = "default_timestamp")]
pub updated_at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub deleted_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub messages: Option<Vec<Message>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_message: Option<Message>,
}
fn default_timestamp() -> String {
chrono::Utc::now().to_rfc3339()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConversationsResponse {
pub conversations: Vec<Conversation>,
pub total: i32,
}
#[derive(Debug, Clone, Serialize)]
pub struct CreateConversationRequest {
#[serde(rename = "type")]
pub conversation_type: String,
pub member_ids: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateConversationResponse {
pub conversation_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SyncConversationListData {
pub conversations: Vec<Conversation>,
pub total: i32,
pub sync_id: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConversationMember {
pub id: String,
pub conversation_id: String,
pub user_id: String,
pub role: String,
pub joined_at: String,
pub last_read_at: Option<String>,
pub unread_count: i32,
pub is_muted: bool,
pub created_at: String,
pub updated_at: String,
}