mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2025-07-19 21:55:24 +00:00
Start conversations system migration
This commit is contained in:
@@ -5,31 +5,86 @@
|
||||
//! @author Pierre HUBERT
|
||||
|
||||
use serde::Serialize;
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::data::conversation_message::ConversationMessage;
|
||||
use crate::data::conversation_message::{ConversationMessage, ConversationServerMessageType};
|
||||
use crate::utils::user_data_utils::user_data_url;
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[allow(non_snake_case)]
|
||||
struct ConversationMessageFileAPI {
|
||||
url: String,
|
||||
size: u64,
|
||||
name: String,
|
||||
thumbnail: Option<String>,
|
||||
r#type: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct ConversationMessageAPI {
|
||||
ID: u64,
|
||||
convID: u64,
|
||||
ID_user: u64,
|
||||
id: u64,
|
||||
conv_id: u64,
|
||||
user_id: Option<u64>,
|
||||
time_insert: u64,
|
||||
message: String,
|
||||
image_path: Option<String>,
|
||||
message: Option<String>,
|
||||
file: Option<ConversationMessageFileAPI>,
|
||||
server_message: Option<serde_json::Value>,
|
||||
}
|
||||
|
||||
impl ConversationMessageAPI {
|
||||
/// Turn a conversation message into an API entry
|
||||
pub fn new(msg: &ConversationMessage) -> ConversationMessageAPI {
|
||||
let file = match &msg.file {
|
||||
None => None,
|
||||
Some(file) => Some(ConversationMessageFileAPI {
|
||||
url: user_data_url(&file.path.clone()),
|
||||
size: file.size,
|
||||
name: file.name.clone(),
|
||||
thumbnail: file.thumbnail.clone(),
|
||||
r#type: file.r#type.clone(),
|
||||
})
|
||||
};
|
||||
|
||||
let server_message = match &msg.server_message {
|
||||
None => None,
|
||||
Some(msg) => {
|
||||
let mut value = serde_json::Map::new();
|
||||
|
||||
match msg {
|
||||
ConversationServerMessageType::UserCreatedConversation(user) => {
|
||||
value.insert("type".to_string(), Value::from("user_created_conv"));
|
||||
value.insert("user_id".to_string(), Value::from(user.id()));
|
||||
}
|
||||
|
||||
ConversationServerMessageType::UserAddedAnotherUserToConversation(msg) => {
|
||||
value.insert("type".to_string(), Value::from("user_added_another"));
|
||||
value.insert("user_who_added".to_string(), Value::from(msg.user_who_added.id()));
|
||||
value.insert("user_added".to_string(), Value::from(msg.user_added.id()));
|
||||
}
|
||||
|
||||
ConversationServerMessageType::UserLeftConversation(u) => {
|
||||
value.insert("type".to_string(), Value::from("user_left"));
|
||||
value.insert("user_id".to_string(), Value::from(u.id()));
|
||||
}
|
||||
|
||||
ConversationServerMessageType::UserRemovedFromConversation(msg) => {
|
||||
value.insert("type".to_string(), Value::from("user_removed_another"));
|
||||
value.insert("user_who_removed".to_string(), Value::from(msg.user_who_removed.id()));
|
||||
value.insert("user_removed".to_string(), Value::from(msg.user_removed.id()));
|
||||
}
|
||||
}
|
||||
|
||||
Some(serde_json::Value::Object(value))
|
||||
}
|
||||
};
|
||||
|
||||
ConversationMessageAPI {
|
||||
ID: msg.id,
|
||||
convID: msg.conv_id,
|
||||
ID_user: msg.user_id.id(),
|
||||
id: msg.id,
|
||||
conv_id: msg.conv_id,
|
||||
user_id: msg.user_id.clone().map(|u| u.id()),
|
||||
time_insert: msg.time_sent,
|
||||
message: msg.message.clone().unwrap_or(String::new()),
|
||||
image_path: msg.image_path.as_ref().map(|f| user_data_url(f)),
|
||||
message: msg.message.clone(),
|
||||
file,
|
||||
server_message,
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user