1
0
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:
2021-03-02 18:57:34 +01:00
parent cd5419edea
commit 60733f2d04
7 changed files with 262 additions and 30 deletions

@@ -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,
}
}