1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-21 00:45:18 +00:00

Can get information about a single friendship

This commit is contained in:
2020-06-30 08:14:58 +02:00
parent 9a3b565f00
commit 31ed53aacf
3 changed files with 59 additions and 8 deletions

View File

@ -4,25 +4,59 @@
use crate::constants::database_tables_names::{FRIENDS_TABLE, USERS_TABLE};
use crate::data::error::ResultBoxError;
use crate::data::error::{ExecError, ResultBoxError};
use crate::data::friend::Friend;
use crate::data::user::UserID;
use crate::helpers::database;
use crate::helpers::database::QueryInfo;
/// Structure used to get a friend information
pub struct GetFriendsQuery {
target_user: UserID,
friend_id: Option<UserID>,
}
impl GetFriendsQuery {
/// Construct a new request
pub fn new(target_user: &UserID) -> GetFriendsQuery {
GetFriendsQuery {
target_user: target_user.clone(),
friend_id: None,
}
}
/// Get the list of friends
pub fn exec(self) -> ResultBoxError<Vec<Friend>> {
get_list(&self)
}
/// Get information about a single friendship
pub fn get_single_friend(mut self, friend_id: &UserID) -> ResultBoxError<Friend> {
self.friend_id = Some(friend_id.clone());
get_list(&self)?
.pop()
.ok_or(ExecError::boxed_new("Single friend not found!"))
}
}
/// Get the list of friends of a user
pub fn get_list(user_id: &UserID) -> ResultBoxError<Vec<Friend>> {
database::QueryInfo::new(FRIENDS_TABLE)
fn get_list(friend_query: &GetFriendsQuery) -> ResultBoxError<Vec<Friend>> {
let mut query = database::QueryInfo::new(FRIENDS_TABLE)
.alias("f")
.cond_user_id("ID_personne", user_id)
.cond_user_id("ID_personne", &friend_query.target_user)
.join(USERS_TABLE, "u", "f.ID_amis = u.ID")
.add_field("u.last_activity")
.add_field("f.ID_amis")
.add_field("f.actif")
.add_field("f.abonnement")
.add_field("f.autoriser_post_page")
.set_order("u.last_activity DESC")
.exec(db_to_friend)
.set_order("u.last_activity DESC");
if let Some(friend_id) = friend_query.friend_id.as_ref() {
query = query.cond_user_id("ID_amis", friend_id);
}
query.exec(db_to_friend)
}
/// Check out whether two users are friend or not