mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-12-27 22:18:51 +00:00
Can delete group
This commit is contained in:
parent
f031f7b4b3
commit
e26d40183e
@ -199,7 +199,7 @@ pub fn delete_account(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
r.forbidden("You shall not delete MY account (whoever you are, please note that hacking is bad !!!)".to_string())?;
|
||||
}
|
||||
|
||||
account_helper::delete(r.user_id_ref()?);
|
||||
account_helper::delete(r.user_id_ref()?)?;
|
||||
|
||||
r.success("Account deleted.")
|
||||
}
|
@ -11,7 +11,6 @@ use crate::api_data::res_change_group_logo::ResChangeGroupLogo;
|
||||
use crate::api_data::res_create_group::GroupCreationResult;
|
||||
use crate::constants::{DEFAULT_GROUP_LOGO, PATH_GROUPS_LOGOS};
|
||||
use crate::controllers::routes::RequestResult;
|
||||
use crate::data::error::ExecError;
|
||||
use crate::data::group::{Group, GroupAccessLevel, GroupPostsCreationLevel, GroupRegistrationLevel, GroupVisibilityLevel};
|
||||
use crate::data::group_id::GroupID;
|
||||
use crate::data::group_member::{GroupMember, GroupMembershipLevel};
|
||||
@ -367,6 +366,10 @@ pub fn set_following(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
|
||||
/// Delete a group
|
||||
pub fn delete_group(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
// TODO : implement groups deletion
|
||||
r.internal_error(ExecError::boxed_new("Method not implemented yet"))
|
||||
let group_id = r.post_group_id_with_access("groupID", GroupAccessLevel::ADMIN_ACCESS)?;
|
||||
r.need_user_password("password")?;
|
||||
|
||||
groups_helper::delete(&group_id)?;
|
||||
|
||||
r.success("Group deleted.")
|
||||
}
|
@ -215,4 +215,14 @@ impl PartialNotification {
|
||||
self.dest_user_id = Some(id.clone());
|
||||
self
|
||||
}
|
||||
|
||||
pub fn set_on_elem_id(mut self, id: u64) -> PartialNotification {
|
||||
self.on_elem_id = Some(id);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn set_on_elem_type(mut self, t: NotifElemType) -> PartialNotification {
|
||||
self.on_elem_type = Some(t);
|
||||
self
|
||||
}
|
||||
}
|
@ -300,7 +300,7 @@ pub fn export(user_id: &UserID) -> ResultBoxError<AccountExport> {
|
||||
}
|
||||
|
||||
/// Delete a user's account
|
||||
pub fn delete(user_id: &UserID) -> ResultBoxError {
|
||||
pub fn delete(_user_id: &UserID) -> ResultBoxError {
|
||||
// TODO : close all websockets of user
|
||||
|
||||
// TODO : Delete all group membership
|
||||
|
@ -9,7 +9,8 @@ use crate::data::group_id::GroupID;
|
||||
use crate::data::group_member::{GroupMember, GroupMembershipLevel};
|
||||
use crate::data::new_group::NewGroup;
|
||||
use crate::data::user::UserID;
|
||||
use crate::helpers::{database, posts_helper};
|
||||
use crate::helpers::{database, likes_helper, notifications_helper, posts_helper};
|
||||
use crate::helpers::likes_helper::LikeType;
|
||||
use crate::utils::date_utils::time;
|
||||
|
||||
impl GroupVisibilityLevel {
|
||||
@ -462,6 +463,32 @@ pub fn can_user_create_posts(group_id: &GroupID, user_id: &UserID) -> ResultBoxE
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete a group
|
||||
pub fn delete(group_id: &GroupID) -> ResultBoxError {
|
||||
// Delete all likes of the group
|
||||
likes_helper::delete_all(group_id.id(), LikeType::GROUP)?;
|
||||
|
||||
// Delete the logo of the group
|
||||
delete_logo(group_id)?;
|
||||
|
||||
// Delete all group posts
|
||||
posts_helper::delete_all_group(group_id)?;
|
||||
|
||||
// Delete all group related notifications
|
||||
notifications_helper::delete_all_related_with_group(group_id)?;
|
||||
|
||||
// Delete all group members
|
||||
database::DeleteQuery::new(GROUPS_MEMBERS_TABLE)
|
||||
.cond_group_id("groups_id", group_id)
|
||||
.exec()?;
|
||||
|
||||
// Delete group information
|
||||
database::DeleteQuery::new(GROUPS_LIST_TABLE)
|
||||
.cond_group_id("id", group_id)
|
||||
.exec()
|
||||
}
|
||||
|
||||
|
||||
/// Turn a database entry into a group struct
|
||||
fn db_to_group(row: &database::RowResult) -> ResultBoxError<Group> {
|
||||
let group_id = row.get_group_id("id")?;
|
||||
|
@ -6,6 +6,7 @@ use std::collections::HashMap;
|
||||
|
||||
use crate::constants::database_tables_names::NOTIFICATIONS_TABLE;
|
||||
use crate::data::error::ResultBoxError;
|
||||
use crate::data::group_id::GroupID;
|
||||
use crate::data::notification::{NotifElemType, NotifEventType, NotifEventVisibility, Notification, PartialNotification};
|
||||
use crate::data::user::UserID;
|
||||
use crate::helpers::database;
|
||||
@ -26,6 +27,19 @@ pub fn delete_all_user(user_id: &UserID) -> ResultBoxError {
|
||||
delete(&PartialNotification::new().set_dest_user_id(user_id))
|
||||
}
|
||||
|
||||
/// Delete all the notifications related with a group
|
||||
pub fn delete_all_related_with_group(group_id: &GroupID) -> ResultBoxError {
|
||||
delete(&PartialNotification::new()
|
||||
.set_on_elem_type(NotifElemType::GROUP_MEMBERSHIP)
|
||||
.set_on_elem_id(group_id.id())
|
||||
)?;
|
||||
|
||||
delete(&PartialNotification::new()
|
||||
.set_on_elem_type(NotifElemType::GROUP_PAGE)
|
||||
.set_on_elem_id(group_id.id())
|
||||
)
|
||||
}
|
||||
|
||||
/// Check out whether a similar notification exists for given specifications
|
||||
pub fn similar_exists(n: &PartialNotification) -> ResultBoxError<bool> {
|
||||
database::QueryInfo::new(NOTIFICATIONS_TABLE)
|
||||
|
@ -334,6 +334,13 @@ pub fn export_all_posts_user(user_id: &UserID) -> ResultBoxError<Vec<Post>> {
|
||||
.exec(db_to_post)
|
||||
}
|
||||
|
||||
/// Get the entire list of posts of a given group
|
||||
pub fn export_all_posts_group(group_id: &GroupID) -> ResultBoxError<Vec<Post>> {
|
||||
database::QueryInfo::new(POSTS_TABLE)
|
||||
.cond_group_id("group_id", group_id)
|
||||
.exec(db_to_post)
|
||||
}
|
||||
|
||||
/// Get the access level of a user over a post
|
||||
pub fn get_access_level(p: &Post, user_id: &Option<UserID>) -> ResultBoxError<PostAccessLevel> {
|
||||
if user_id == &p.user_id.as_option() {
|
||||
@ -450,6 +457,15 @@ pub fn delete(p: &Post) -> ResultBoxError {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete all the posts related with a group
|
||||
pub fn delete_all_group(group_id: &GroupID) -> ResultBoxError {
|
||||
for post in export_all_posts_group(group_id)? {
|
||||
delete(&post)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get all the posts that use of movie
|
||||
pub fn get_posts_for_movie(m: &Movie) -> ResultBoxError<Vec<Post>> {
|
||||
database::QueryInfo::new(POSTS_TABLE)
|
||||
|
Loading…
Reference in New Issue
Block a user