diff --git a/app/backend/src/groups/groups.controller.ts b/app/backend/src/groups/groups.controller.ts index 136cb8a..7aa2ada 100644 --- a/app/backend/src/groups/groups.controller.ts +++ b/app/backend/src/groups/groups.controller.ts @@ -144,6 +144,20 @@ export class GroupsController { return this.groupsService.approveGroup(id, memberId, member); } + @Delete('/:id') + @ApiOperation({ + summary: '그룹 삭제', + description: '특정 그룹을 삭제합니다.', + }) + @ApiParam({ name: 'id', description: '삭제할 그룹의 Id' }) + @ApiResponse({ status: 200, description: 'Successfully deleted the group' }) + @ApiResponse({ status: 401, description: 'Unauthorized' }) + @ApiResponse({ status: 403, description: 'Forbidden' }) + @ApiResponse({ status: 404, description: 'Group with id not found' }) + async deleteGroup(@Param('id', ParseIntPipe) id: number, @GetUser() member: Member): Promise { + await this.groupsService.deleteGroup(id, member); + } + @Delete('/:id/leave') @ApiOperation({ summary: '그룹 참가 취소', diff --git a/app/backend/src/groups/groups.repository.ts b/app/backend/src/groups/groups.repository.ts index 2a47f91..d92b0bb 100644 --- a/app/backend/src/groups/groups.repository.ts +++ b/app/backend/src/groups/groups.repository.ts @@ -144,6 +144,32 @@ export class GroupsRepository { }); } + async deleteGroup(groupId: number, member: Member): Promise { + const group = await this.prisma.group.findUnique({ + where: { + id: groupId, + }, + }); + + if (!group) { + throw new NotFoundException(`Group with id ${groupId} not found`); + } + + const isGroupOwner = await this.isGroupOwner(groupId, Number(member.id)); + if (!isGroupOwner) { + throw new ForbiddenException('Only group owners can delete the group'); + } + + await this.prisma.group.update({ + where: { + id: groupId, + }, + data: { + deletedAt: new Date(), + }, + }); + } + async leaveGroup(groupId: number, member: Member): Promise { const group = await this.prisma.group.findUnique({ where: { id: groupId }, diff --git a/app/backend/src/groups/groups.service.ts b/app/backend/src/groups/groups.service.ts index 9539d06..ca641ae 100644 --- a/app/backend/src/groups/groups.service.ts +++ b/app/backend/src/groups/groups.service.ts @@ -47,6 +47,10 @@ export class GroupsService { } } + async deleteGroup(groupId: number, member: Member): Promise { + await this.groupsRepository.deleteGroup(groupId, member); + } + async leaveGroup(id: number, member: Member): Promise { await this.groupsRepository.leaveGroup(id, member); }