mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-12-28 14:38:52 +00:00
Get user custom emojies
This commit is contained in:
parent
2b1161c3f0
commit
c4f8e5fa97
29
src/api_data/custom_emoji.rs
Normal file
29
src/api_data/custom_emoji.rs
Normal file
@ -0,0 +1,29 @@
|
||||
//! # Custom emoji API object
|
||||
//!
|
||||
//! @author Pierre Hubert
|
||||
use serde::Serialize;
|
||||
use crate::data::custom_emoji::CustomEmoji;
|
||||
use crate::utils::user_data_utils::user_data_url;
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[allow(non_snake_case)]
|
||||
pub struct CustomEmojiAPI {
|
||||
id: u64,
|
||||
userID: i64,
|
||||
shortcut: String,
|
||||
url: String
|
||||
}
|
||||
|
||||
impl CustomEmojiAPI {
|
||||
|
||||
/// Create a new Custom Emoji API entry
|
||||
pub fn new(custom_emoji: &CustomEmoji) -> CustomEmojiAPI {
|
||||
CustomEmojiAPI {
|
||||
id: custom_emoji.id,
|
||||
userID: custom_emoji.user_id,
|
||||
shortcut: custom_emoji.shortcut.to_string(),
|
||||
url: user_data_url(&custom_emoji.path),
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -10,4 +10,5 @@
|
||||
pub mod http_error;
|
||||
pub mod login_success;
|
||||
pub mod current_user_id;
|
||||
pub mod user_info;
|
||||
pub mod user_info;
|
||||
pub mod custom_emoji;
|
@ -4,10 +4,11 @@
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::data::user::{User, UserPageStatus, UserID};
|
||||
use crate::helpers::friends_helper;
|
||||
use crate::helpers::{friends_helper, custom_emojies_helper};
|
||||
use crate::data::error::ResultBoxError;
|
||||
use crate::utils::user_data_utils::user_data_url;
|
||||
use crate::data::user::AccountImageVisibility::{EVERYONE, COMUNIC_USERS};
|
||||
use crate::api_data::custom_emoji::CustomEmojiAPI;
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[allow(non_snake_case)]
|
||||
@ -19,6 +20,7 @@ pub struct APIUserInfo {
|
||||
openPage: bool,
|
||||
virtualDirectory: String,
|
||||
accountImage: String,
|
||||
customEmojis: Vec<CustomEmojiAPI>,
|
||||
}
|
||||
|
||||
impl APIUserInfo {
|
||||
@ -33,6 +35,10 @@ impl APIUserInfo {
|
||||
openPage: info.status == UserPageStatus::OPEN,
|
||||
virtualDirectory: info.virtual_directory.clone().unwrap_or(String::new()),
|
||||
accountImage: APIUserInfo::get_account_image_url(user_id, info)?,
|
||||
customEmojis: custom_emojies_helper::get_list_user(info.id)?
|
||||
.iter()
|
||||
.map(|f| CustomEmojiAPI::new(f))
|
||||
.collect(),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,9 @@ pub mod database_tables_names {
|
||||
|
||||
/// Friends table
|
||||
pub const FRIENDS_TABLE: &str = "amis";
|
||||
|
||||
/// Custom emojis table
|
||||
pub const EMOJIS_TABLE: &str = "comunic_custom_emojis";
|
||||
}
|
||||
|
||||
/// The account image to show for user who do not have any
|
||||
|
13
src/data/custom_emoji.rs
Normal file
13
src/data/custom_emoji.rs
Normal file
@ -0,0 +1,13 @@
|
||||
//! User custom emoji
|
||||
//!
|
||||
//! @author Pierre Hubert
|
||||
|
||||
use crate::data::user::UserID;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CustomEmoji {
|
||||
pub id: u64,
|
||||
pub user_id: UserID,
|
||||
pub shortcut: String,
|
||||
pub path: String,
|
||||
}
|
@ -5,4 +5,5 @@ pub mod http_request_handler;
|
||||
pub mod api_client;
|
||||
|
||||
pub mod user;
|
||||
pub mod user_token;
|
||||
pub mod user_token;
|
||||
pub mod custom_emoji;
|
26
src/helpers/custom_emojies_helper.rs
Normal file
26
src/helpers/custom_emojies_helper.rs
Normal file
@ -0,0 +1,26 @@
|
||||
//! # Custom emojies helper
|
||||
//!
|
||||
//! @author Pierre Hubert
|
||||
|
||||
use crate::data::user::UserID;
|
||||
use crate::data::error::ResultBoxError;
|
||||
use crate::data::custom_emoji::CustomEmoji;
|
||||
use crate::helpers::database;
|
||||
use crate::constants::database_tables_names::EMOJIS_TABLE;
|
||||
|
||||
/// Get the list of emojies of a user
|
||||
pub fn get_list_user(user_id: UserID) -> ResultBoxError<Vec<CustomEmoji>> {
|
||||
database::QueryInfo::new(EMOJIS_TABLE)
|
||||
.cond_i64("user_id", user_id)
|
||||
.exec(db_to_custom_emoji)
|
||||
}
|
||||
|
||||
/// Turn a database entry into a [CustomEmoji]
|
||||
fn db_to_custom_emoji(row: &database::RowResult) -> ResultBoxError<CustomEmoji> {
|
||||
Ok(CustomEmoji {
|
||||
id: row.get_u64("id")?,
|
||||
user_id: row.get_int64("user_id")?,
|
||||
shortcut: row.get_str("shortcut")?,
|
||||
path: row.get_str("path")?
|
||||
})
|
||||
}
|
@ -86,6 +86,11 @@ impl QueryInfo {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn cond_u64(mut self, key: &str, val: u64) -> QueryInfo {
|
||||
self.conditions.insert(key.to_string(), val.to_string());
|
||||
self
|
||||
}
|
||||
|
||||
pub fn cond_i64(mut self, key: &str, val: i64) -> QueryInfo {
|
||||
self.conditions.insert(key.to_string(), val.to_string());
|
||||
self
|
||||
@ -96,6 +101,12 @@ impl QueryInfo {
|
||||
self.fields.push(key.to_string());
|
||||
self
|
||||
}
|
||||
|
||||
/// Execute query
|
||||
pub fn exec<E, F: Fn(&RowResult) -> ProcessRowResult<E>>(self, process_function: F)
|
||||
-> Result<Vec<E>, Box<dyn Error>> {
|
||||
query(self, process_function)
|
||||
}
|
||||
}
|
||||
|
||||
/// Struct used to read the result of a request
|
||||
@ -136,6 +147,17 @@ impl<'a> RowResult<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Find an integer included in the request
|
||||
pub fn get_u64(&self, name: &str) -> Result<u64, Box<dyn Error>> {
|
||||
let value = self.row.get_opt(self.find_col(name)?);
|
||||
|
||||
match value {
|
||||
None => Err(ExecError::boxed_string(
|
||||
format!("Could not extract integer field {} !", name))),
|
||||
Some(s) => Ok(s?)
|
||||
}
|
||||
}
|
||||
|
||||
/// Find an integer included in the request
|
||||
pub fn get_usize(&self, name: &str) -> Result<usize, Box<dyn Error>> {
|
||||
let value = self.row.get_opt(self.find_col(name)?);
|
||||
|
@ -3,4 +3,5 @@ pub mod database;
|
||||
pub mod api_helper;
|
||||
pub mod account_helper;
|
||||
pub mod user_helper;
|
||||
pub mod friends_helper;
|
||||
pub mod friends_helper;
|
||||
pub mod custom_emojies_helper;
|
Loading…
Reference in New Issue
Block a user