Add HouseManagement integration to AdminPanel and implement removeMemberAsAdmin feature in HouseService: Enhance admin capabilities with new section for house management and functionality to remove members from houses by admins, including points deduction logic.
This commit is contained in:
@@ -981,6 +981,62 @@ export class HouseService {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire un membre d'une maison (par un admin du site)
|
||||
* Bypass les vérifications normales de permissions
|
||||
*/
|
||||
async removeMemberAsAdmin(
|
||||
houseId: string,
|
||||
memberIdToRemove: string
|
||||
): Promise<void> {
|
||||
const memberToRemoveMembership = await prisma.houseMembership.findUnique({
|
||||
where: {
|
||||
houseId_userId: {
|
||||
houseId,
|
||||
userId: memberIdToRemove,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!memberToRemoveMembership) {
|
||||
throw new NotFoundError("Membre");
|
||||
}
|
||||
|
||||
// Un OWNER ne peut pas être retiré même par un admin
|
||||
if (memberToRemoveMembership.role === "OWNER") {
|
||||
throw new ForbiddenError("Le propriétaire ne peut pas être retiré");
|
||||
}
|
||||
|
||||
// Récupérer les points à enlever depuis les préférences du site
|
||||
const sitePreferences =
|
||||
await sitePreferencesService.getOrCreateSitePreferences();
|
||||
const pointsToDeduct =
|
||||
(sitePreferences as SitePreferencesWithHousePoints).houseLeavePoints ??
|
||||
100;
|
||||
|
||||
// Supprimer le membership et enlever les points
|
||||
await prisma.$transaction(async (tx) => {
|
||||
await tx.houseMembership.delete({
|
||||
where: {
|
||||
houseId_userId: {
|
||||
houseId,
|
||||
userId: memberIdToRemove,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Enlever les points à l'utilisateur retiré
|
||||
await tx.user.update({
|
||||
where: { id: memberIdToRemove },
|
||||
data: {
|
||||
score: {
|
||||
decrement: pointsToDeduct,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Quitte une maison
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user