diff --git a/src/admin/admin.controller.ts b/src/admin/admin.controller.ts index dc5e9ba..49ec1f0 100644 --- a/src/admin/admin.controller.ts +++ b/src/admin/admin.controller.ts @@ -130,4 +130,10 @@ export class AdminController { ): Promise { return this._adminService.broadcastNotification(uuid, notification); } + + @UseGuards(AuthGuard) + @Delete('completionists') + public clearCompletionists(@UserDecorator('id') uuid: string): Promise { + return this._adminService.clearCompletionists(uuid); + } } diff --git a/src/admin/admin.service.ts b/src/admin/admin.service.ts index d03eee2..0ec8981 100644 --- a/src/admin/admin.service.ts +++ b/src/admin/admin.service.ts @@ -520,4 +520,27 @@ export class AdminService { return; } + + public async clearCompletionists(uuid: string) { + const requestingUser = await this._userRepository.findOne(uuid, { + relations: ['roles'], + }); + + if (!this._hasPermission(requestingUser.roles, PERMISSION.ADMIN)) { + throw new HttpException('Permission denied.', HttpStatus.FORBIDDEN); + } + + const users = await this._userRepository.find({ + relations: ['badges'], + }); + + for (const user of users) { + if (user.badges.some((badge) => badge.id.startsWith('completionist'))) { + user.badges = user.badges.filter( + (badge) => !badge.id.startsWith('completionist'), + ); + await this._userRepository.save(user); + } + } + } }