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:
@ -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
|
||||
|
Reference in New Issue
Block a user