Skip to content

Commit 6b977aa

Browse files
Feat: 특정 역할에 권한 삭제
1 parent 38a7bb6 commit 6b977aa

12 files changed

Lines changed: 157 additions & 20 deletions

File tree

src/main/java/flipnote/group/adapter/in/web/PermissionController.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
import org.springframework.web.bind.annotation.RestController;
1111

1212
import flipnote.group.api.dto.request.AddPermissionRequestDto;
13+
import flipnote.group.api.dto.request.RemovePermissionRequestDto;
1314
import flipnote.group.api.dto.response.AddPermissionResponseDto;
15+
import flipnote.group.api.dto.response.RemovePermissionResponseDto;
1416
import flipnote.group.application.port.in.AddPermissionUseCase;
15-
import flipnote.group.application.port.in.command.AddPermissionCommand;
17+
import flipnote.group.application.port.in.RemovePermissionUseCase;
18+
import flipnote.group.application.port.in.command.PermissionCommand;
1619
import flipnote.group.application.port.in.result.AddPermissionResult;
20+
import flipnote.group.application.port.in.result.RemovePermissionResult;
1721
import jakarta.validation.Valid;
1822
import lombok.RequiredArgsConstructor;
1923

@@ -23,6 +27,7 @@
2327
public class PermissionController {
2428

2529
private final AddPermissionUseCase addPermissionUseCase;
30+
private final RemovePermissionUseCase removePermissionUseCase;
2631

2732
/**
2833
* 하위 권한 추가
@@ -33,22 +38,31 @@ public ResponseEntity<AddPermissionResponseDto> addDownPermission(
3338
@PathVariable("groupId") Long groupId,
3439
@Valid @RequestBody AddPermissionRequestDto req) {
3540

36-
AddPermissionCommand cmd = new AddPermissionCommand(userId, groupId, req.hostRole(), req.changeRole(), req.permission());
41+
PermissionCommand cmd = new PermissionCommand(userId, groupId, req.hostRole(), req.changeRole(), req.permission());
3742

3843
AddPermissionResult result = addPermissionUseCase.addPermission(cmd);
3944

4045
AddPermissionResponseDto res = AddPermissionResponseDto.from(result);
41-
46+
47+
return ResponseEntity.ok(res);
48+
}
49+
50+
//todo 하위 권한 삭제
51+
@DeleteMapping("/permissions")
52+
public ResponseEntity<?> changeDownPermission(
53+
@RequestHeader("X-USER-ID") Long userId,
54+
@PathVariable("groupId") Long groupId,
55+
@Valid @RequestBody RemovePermissionRequestDto req) {
56+
57+
PermissionCommand cmd = new PermissionCommand(userId, groupId, req.hostRole(), req.changeRole(), req.permission());
58+
59+
RemovePermissionResult result = removePermissionUseCase.removePermission(cmd);
60+
61+
RemovePermissionResponseDto res = RemovePermissionResponseDto.from(result);
62+
63+
return ResponseEntity.ok(res);
4264
}
4365

44-
// //todo 하위 권한 삭제 -> 유저 아이디, 하위 그거, 하위 권한
45-
// @DeleteMapping("/permissions")
46-
// public ResponseEntity<?> changeDownPermission(
47-
// @RequestHeader("X-USER-ID") Long userId,
48-
// @PathVariable("groupId") Long groupId,
49-
// @Valid @RequestBody DeletePermissionRequestDto req) {
50-
//
51-
// }
5266

5367
//todo 그룹 멤버 추방
5468

src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,24 @@ public boolean existPermission(GroupMemberRole role, Long groupId, GroupPermissi
143143

144144
return groupRolePermissionRepository.existsByGroupRoleIdAndPermission(roleEntity.getId(), permission);
145145
}
146+
147+
/**
148+
* 권한 삭제
149+
* @param groupId
150+
* @param role
151+
* @param permission
152+
* @return
153+
*/
154+
@Override
155+
public List<GroupPermission> removePermission(Long groupId, GroupMemberRole role, GroupPermission permission) {
156+
RoleEntity roleEntity = groupRoleRepository.findByGroupIdAndRole(groupId, role);
157+
158+
groupRolePermissionRepository.deleteByGroupRoleIdAndPermission(roleEntity.getId(), permission);
159+
160+
List<PermissionEntity> permissions = groupRolePermissionRepository.findAllByGroupRoleId(roleEntity.getId());
161+
162+
return permissions.stream()
163+
.map(PermissionEntity::getPermission)
164+
.toList();
165+
}
146166
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package flipnote.group.api.dto.request;
2+
3+
import flipnote.group.domain.model.member.GroupMemberRole;
4+
import flipnote.group.domain.model.permission.GroupPermission;
5+
6+
public record RemovePermissionRequestDto(
7+
GroupMemberRole hostRole,
8+
GroupMemberRole changeRole,
9+
GroupPermission permission
10+
) {
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package flipnote.group.api.dto.response;
2+
3+
import java.util.List;
4+
5+
import flipnote.group.application.port.in.result.RemovePermissionResult;
6+
import flipnote.group.domain.model.permission.GroupPermission;
7+
8+
public record RemovePermissionResponseDto(
9+
List<GroupPermission> permissions
10+
) {
11+
public static RemovePermissionResponseDto from(RemovePermissionResult result) {
12+
return new RemovePermissionResponseDto(result.groupPermissions());
13+
}
14+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package flipnote.group.application.port.in;
22

3-
import flipnote.group.application.port.in.command.AddPermissionCommand;
3+
import flipnote.group.application.port.in.command.PermissionCommand;
44
import flipnote.group.application.port.in.result.AddPermissionResult;
55

66
public interface AddPermissionUseCase {
7-
AddPermissionResult addPermission(AddPermissionCommand cmd);
7+
AddPermissionResult addPermission(PermissionCommand cmd);
88
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package flipnote.group.application.port.in;
2+
3+
import flipnote.group.application.port.in.command.PermissionCommand;
4+
import flipnote.group.application.port.in.result.RemovePermissionResult;
5+
6+
public interface RemovePermissionUseCase {
7+
RemovePermissionResult removePermission(PermissionCommand cmd);
8+
}

src/main/java/flipnote/group/application/port/in/command/AddPermissionCommand.java renamed to src/main/java/flipnote/group/application/port/in/command/PermissionCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import flipnote.group.domain.model.member.GroupMemberRole;
44
import flipnote.group.domain.model.permission.GroupPermission;
55

6-
public record AddPermissionCommand(
6+
public record PermissionCommand(
77
Long userId,
88
Long groupId,
99
GroupMemberRole hostRole,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package flipnote.group.application.port.in.result;
2+
3+
import java.util.List;
4+
5+
import flipnote.group.domain.model.permission.GroupPermission;
6+
7+
public record RemovePermissionResult(
8+
List<GroupPermission> groupPermissions
9+
) {
10+
}

src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ public interface GroupRoleRepositoryPort {
1616
List<GroupPermission> addPermission(Long groupId, GroupMemberRole role, GroupPermission permission);
1717

1818
boolean existPermission(GroupMemberRole groupMemberRole, Long aLong, GroupPermission permission);
19+
20+
List<GroupPermission> removePermission(Long groupId, GroupMemberRole role, GroupPermission permission);
1921
}

src/main/java/flipnote/group/application/service/AddPermissionService.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.springframework.transaction.annotation.Transactional;
77

88
import flipnote.group.application.port.in.AddPermissionUseCase;
9-
import flipnote.group.application.port.in.command.AddPermissionCommand;
9+
import flipnote.group.application.port.in.command.PermissionCommand;
1010
import flipnote.group.application.port.in.result.AddPermissionResult;
1111
import flipnote.group.application.port.out.GroupRoleRepositoryPort;
1212
import flipnote.group.domain.model.permission.GroupPermission;
@@ -25,7 +25,7 @@ public class AddPermissionService implements AddPermissionUseCase {
2525
*/
2626
@Override
2727
@Transactional
28-
public AddPermissionResult addPermission(AddPermissionCommand cmd) {
28+
public AddPermissionResult addPermission(PermissionCommand cmd) {
2929

3030
boolean isRole = groupRoleRepository.checkRole(cmd.userId(), cmd.groupId(), cmd.hostRole());
3131

@@ -34,6 +34,11 @@ public AddPermissionResult addPermission(AddPermissionCommand cmd) {
3434
throw new IllegalArgumentException("not equals role");
3535
}
3636

37+
//권한이 낮을 경우
38+
if(!cmd.hostRole().isHigherThan(cmd.changeRole())) {
39+
throw new IllegalArgumentException("host lower than changeRole");
40+
}
41+
3742
//호스트의 권한이 있는지
3843
boolean existHostPermission = groupRoleRepository.checkPermission(cmd.userId(), cmd.groupId(), cmd.permission());
3944

@@ -47,10 +52,6 @@ public AddPermissionResult addPermission(AddPermissionCommand cmd) {
4752
throw new IllegalArgumentException("already exist permission");
4853
}
4954

50-
//권한이 낮을 경우
51-
if(!cmd.hostRole().isHigherThan(cmd.changeRole())) {
52-
throw new IllegalArgumentException("host lower than changeRole");
53-
}
5455

5556
List<GroupPermission> groupPermissions = groupRoleRepository.addPermission(cmd.groupId(), cmd.changeRole(),
5657
cmd.permission());

0 commit comments

Comments
 (0)