mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 05:19:22 +00:00
Can delete all user groups
This commit is contained in:
parent
9cc205f59a
commit
c222c8b054
@ -298,8 +298,9 @@ export class AccountController {
|
|||||||
public static async DeleteAccount(h: RequestHandler) {
|
public static async DeleteAccount(h: RequestHandler) {
|
||||||
await h.needUserPostPassword("password");
|
await h.needUserPostPassword("password");
|
||||||
|
|
||||||
// TODO : implement
|
await AccountHelper.Delete(h.getUserId());
|
||||||
h.error(500, "Method not implemented yet.");
|
|
||||||
|
h.error(500, "Method not completely implemented yet.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -414,6 +414,7 @@ export class GroupsController {
|
|||||||
h.error(404, "Membership not found!");
|
h.error(404, "Membership not found!");
|
||||||
|
|
||||||
// If the user is an admin, he must not be the last admin of the group
|
// If the user is an admin, he must not be the last admin of the group
|
||||||
|
// TODO : use new method
|
||||||
if(userID == h.getUserId() && currUserMembership.level == GroupMembershipLevels.ADMINISTRATOR
|
if(userID == h.getUserId() && currUserMembership.level == GroupMembershipLevels.ADMINISTRATOR
|
||||||
&& await GroupsHelper.CountMembersAtLevel(groupID, GroupMembershipLevels.ADMINISTRATOR) == 1)
|
&& await GroupsHelper.CountMembersAtLevel(groupID, GroupMembershipLevels.ADMINISTRATOR) == 1)
|
||||||
h.error(401, "You are the last administrator of this group!");
|
h.error(401, "You are the last administrator of this group!");
|
||||||
@ -533,6 +534,7 @@ export class GroupsController {
|
|||||||
const groupID = await h.postGroupIDWithAccess("id", GroupsAccessLevel.LIMITED_ACCESS);
|
const groupID = await h.postGroupIDWithAccess("id", GroupsAccessLevel.LIMITED_ACCESS);
|
||||||
const level = await GroupsHelper.GetMembershipLevel(groupID, h.getUserId());
|
const level = await GroupsHelper.GetMembershipLevel(groupID, h.getUserId());
|
||||||
|
|
||||||
|
// TODO : use new method
|
||||||
if(level == GroupMembershipLevels.ADMINISTRATOR
|
if(level == GroupMembershipLevels.ADMINISTRATOR
|
||||||
&& await GroupsHelper.CountMembersAtLevel(groupID, GroupMembershipLevels.ADMINISTRATOR) == 1)
|
&& await GroupsHelper.CountMembersAtLevel(groupID, GroupMembershipLevels.ADMINISTRATOR) == 1)
|
||||||
h.error(401, "You are the last administrator of the group!");
|
h.error(401, "You are the last administrator of the group!");
|
||||||
|
@ -434,4 +434,18 @@ export class AccountHelper {
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove completely a user account
|
||||||
|
*
|
||||||
|
* @param userID Target user ID
|
||||||
|
*/
|
||||||
|
public static async Delete(userID: number) {
|
||||||
|
|
||||||
|
// Delete all groups memberships
|
||||||
|
await GroupsHelper.DeleteAllUsersGroups(userID);
|
||||||
|
|
||||||
|
// TODO : continue work
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
@ -392,6 +392,17 @@ export class GroupsHelper {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check out whether a user is the last admin of a user or not
|
||||||
|
*
|
||||||
|
* @param groupID Target group ID
|
||||||
|
* @param userID Target user ID
|
||||||
|
*/
|
||||||
|
private static async IsLastAdmin(groupID: number, userID: number) : Promise<boolean> {
|
||||||
|
return await this.GetMembershipLevel(groupID, userID) == GroupMembershipLevels.ADMINISTRATOR
|
||||||
|
&& await GroupsHelper.CountMembersAtLevel(groupID, GroupMembershipLevels.ADMINISTRATOR) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current access of a user to a group
|
* Get the current access of a user to a group
|
||||||
*
|
*
|
||||||
@ -617,6 +628,23 @@ export class GroupsHelper {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete all the groups the user belongs to
|
||||||
|
*
|
||||||
|
* @param userID Target user ID
|
||||||
|
*/
|
||||||
|
public static async DeleteAllUsersGroups(userID: number) {
|
||||||
|
|
||||||
|
// Process each group
|
||||||
|
for(const groupID of await this.GetListUser(userID)) {
|
||||||
|
if(await this.IsLastAdmin(groupID, userID))
|
||||||
|
await this.Delete(groupID);
|
||||||
|
|
||||||
|
else
|
||||||
|
await this.DeleteMember(groupID, userID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Turn a database row into a {GroupInfo} object
|
* Turn a database row into a {GroupInfo} object
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user