diff --git a/src/main/java/flipnote/group/adapter/in/web/PermissionController.java b/src/main/java/flipnote/group/adapter/in/web/PermissionController.java index 49f43cf..79153a0 100644 --- a/src/main/java/flipnote/group/adapter/in/web/PermissionController.java +++ b/src/main/java/flipnote/group/adapter/in/web/PermissionController.java @@ -2,6 +2,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -12,27 +13,32 @@ import flipnote.group.api.dto.request.AddPermissionRequestDto; import flipnote.group.api.dto.request.RemovePermissionRequestDto; import flipnote.group.api.dto.response.AddPermissionResponseDto; +import flipnote.group.api.dto.response.MyPermissionResponseDto; import flipnote.group.api.dto.response.RemovePermissionResponseDto; import flipnote.group.application.port.in.AddPermissionUseCase; +import flipnote.group.application.port.in.MyPermissionUseCase; import flipnote.group.application.port.in.RemovePermissionUseCase; +import flipnote.group.application.port.in.command.MyPermissionCommand; import flipnote.group.application.port.in.command.PermissionCommand; import flipnote.group.application.port.in.result.AddPermissionResult; +import flipnote.group.application.port.in.result.MyPermissionResult; import flipnote.group.application.port.in.result.RemovePermissionResult; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @RestController -@RequestMapping("/v1/groups/{groupId}") +@RequestMapping("/v1/groups/{groupId}/permissions") public class PermissionController { private final AddPermissionUseCase addPermissionUseCase; private final RemovePermissionUseCase removePermissionUseCase; + private final MyPermissionUseCase myPermissionUseCase; /** * 하위 권한 추가 */ - @PostMapping("/permissions") + @PostMapping("") public ResponseEntity addDownPermission( @RequestHeader("X-USER-ID") Long userId, @PathVariable("groupId") Long groupId, @@ -54,8 +60,8 @@ public ResponseEntity addDownPermission( * @param req * @return */ - @DeleteMapping("/permissions") - public ResponseEntity changeDownPermission( + @DeleteMapping("") + public ResponseEntity changeDownPermission( @RequestHeader("X-USER-ID") Long userId, @PathVariable("groupId") Long groupId, @Valid @RequestBody RemovePermissionRequestDto req) { @@ -69,8 +75,27 @@ public ResponseEntity changeDownPermission( return ResponseEntity.ok(res); } + /** + * 특정 그룹 내 권한 확인 + * @param userId + * @param groupId + * @return + */ + @GetMapping("") + public ResponseEntity findMyPermission( + @RequestHeader("X-USER-ID") Long userId, + @PathVariable("groupId") Long groupId + ) { + MyPermissionCommand cmd = new MyPermissionCommand(groupId, userId); + + MyPermissionResult result = myPermissionUseCase.findMyPermission(cmd); + + MyPermissionResponseDto res = MyPermissionResponseDto.from(result); + + return ResponseEntity.ok(res); + } //todo 그룹 멤버 추방 - //todo 특정 그룹의 내 권한 확인 + //todo 가입 신청 허가 } diff --git a/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java b/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java index 6fc6b34..a07fef6 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java @@ -76,4 +76,14 @@ public boolean checkOwner(Long groupId, Long userId) { return groupMember.getRole().equals(GroupMemberRole.OWNER); } + + @Override + public GroupMemberEntity findMyRole(Long groupId, Long userId) { + + GroupMemberEntity entity = groupMemberRepository.findByGroupIdAndUserId(groupId, userId).orElseThrow( + () -> new IllegalArgumentException("entity not exist") + ); + + return entity; + } } diff --git a/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java b/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java index 27245e2..bb5a606 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java @@ -188,4 +188,20 @@ public List removePermission(Long groupId, GroupMemberRole role .map(PermissionEntity::getPermission) .toList(); } + + + @Override + public List findMyRolePermission(Long groupId, GroupMemberRole role) { + + RoleEntity roleEntity = groupRoleRepository.findByGroupIdAndRole(groupId, role).orElseThrow( + () -> new IllegalArgumentException("not exists member") + ); + + List permissions = groupRolePermissionRepository.findAllByGroupRoleId( + roleEntity.getId()); + + return permissions.stream() + .map(PermissionEntity::getPermission) + .toList(); + } } diff --git a/src/main/java/flipnote/group/api/dto/response/MyPermissionResponseDto.java b/src/main/java/flipnote/group/api/dto/response/MyPermissionResponseDto.java new file mode 100644 index 0000000..ec8ba2a --- /dev/null +++ b/src/main/java/flipnote/group/api/dto/response/MyPermissionResponseDto.java @@ -0,0 +1,16 @@ +package flipnote.group.api.dto.response; + +import java.util.List; + +import flipnote.group.application.port.in.result.MyPermissionResult; +import flipnote.group.domain.model.member.GroupMemberRole; +import flipnote.group.domain.model.permission.GroupPermission; + +public record MyPermissionResponseDto( + GroupMemberRole role, + List permissions +) { + public static MyPermissionResponseDto from(MyPermissionResult result) { + return new MyPermissionResponseDto(result.role(), result.permissions()); + } +} diff --git a/src/main/java/flipnote/group/application/port/in/MyPermissionUseCase.java b/src/main/java/flipnote/group/application/port/in/MyPermissionUseCase.java new file mode 100644 index 0000000..7a70e0a --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/MyPermissionUseCase.java @@ -0,0 +1,8 @@ +package flipnote.group.application.port.in; + +import flipnote.group.application.port.in.command.MyPermissionCommand; +import flipnote.group.application.port.in.result.MyPermissionResult; + +public interface MyPermissionUseCase { + MyPermissionResult findMyPermission(MyPermissionCommand cmd); +} diff --git a/src/main/java/flipnote/group/application/port/in/command/MyPermissionCommand.java b/src/main/java/flipnote/group/application/port/in/command/MyPermissionCommand.java new file mode 100644 index 0000000..bf41e9b --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/command/MyPermissionCommand.java @@ -0,0 +1,7 @@ +package flipnote.group.application.port.in.command; + +public record MyPermissionCommand( + Long groupId, + Long userId +) { +} diff --git a/src/main/java/flipnote/group/application/port/in/result/MyPermissionResult.java b/src/main/java/flipnote/group/application/port/in/result/MyPermissionResult.java new file mode 100644 index 0000000..9f12d38 --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/result/MyPermissionResult.java @@ -0,0 +1,15 @@ +package flipnote.group.application.port.in.result; + +import java.util.List; + +import flipnote.group.domain.model.member.GroupMemberRole; +import flipnote.group.domain.model.permission.GroupPermission; + +public record MyPermissionResult( + GroupMemberRole role, + List permissions +) { + public static MyPermissionResult of(GroupMemberRole role, List permissions) { + return new MyPermissionResult(role, permissions); + } +} diff --git a/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java b/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java index 77842c0..164fbcb 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java @@ -12,5 +12,7 @@ public interface GroupMemberRepositoryPort { List findMemberInfo(Long groupId); + GroupMemberEntity findMyRole(Long groupId, Long userId); + boolean checkOwner(Long groupId, Long userId); } diff --git a/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java b/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java index 48c4bd5..3fccdf2 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java @@ -19,6 +19,8 @@ public interface GroupRoleRepositoryPort { List removePermission(Long groupId, GroupMemberRole role, GroupPermission permission); + List findMyRolePermission(Long groupId, GroupMemberRole role); + RoleEntity findByIdAndRole(Long id, GroupMemberRole groupMemberRole); GroupMemberRole findRole(Long userId, Long groupId); diff --git a/src/main/java/flipnote/group/application/service/MyPermissionService.java b/src/main/java/flipnote/group/application/service/MyPermissionService.java new file mode 100644 index 0000000..5e75e78 --- /dev/null +++ b/src/main/java/flipnote/group/application/service/MyPermissionService.java @@ -0,0 +1,34 @@ +package flipnote.group.application.service; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import flipnote.group.adapter.out.entity.GroupMemberEntity; +import flipnote.group.application.port.in.MyPermissionUseCase; +import flipnote.group.application.port.in.command.MyPermissionCommand; +import flipnote.group.application.port.in.result.MyPermissionResult; +import flipnote.group.application.port.out.GroupMemberRepositoryPort; +import flipnote.group.application.port.out.GroupRoleRepositoryPort; +import flipnote.group.domain.model.permission.GroupPermission; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class MyPermissionService implements MyPermissionUseCase { + + private final GroupMemberRepositoryPort groupMemberRepository; + private final GroupRoleRepositoryPort groupRoleRepository; + + @Override + @Transactional(readOnly = true) + public MyPermissionResult findMyPermission(MyPermissionCommand cmd) { + + GroupMemberEntity groupMember = groupMemberRepository.findMyRole(cmd.groupId(), cmd.userId()); + + List permissions = groupRoleRepository.findMyRolePermission(groupMember.getGroupId(), groupMember.getRole().getRole()); + + return MyPermissionResult.of(groupMember.getRole().getRole(), permissions); + } +} diff --git a/src/main/java/flipnote/group/application/service/RemovePermissionService.java b/src/main/java/flipnote/group/application/service/RemovePermissionService.java index db772c2..5c9ce69 100644 --- a/src/main/java/flipnote/group/application/service/RemovePermissionService.java +++ b/src/main/java/flipnote/group/application/service/RemovePermissionService.java @@ -7,7 +7,6 @@ import flipnote.group.application.port.in.RemovePermissionUseCase; import flipnote.group.application.port.in.command.PermissionCommand; -import flipnote.group.application.port.in.result.AddPermissionResult; import flipnote.group.application.port.in.result.RemovePermissionResult; import flipnote.group.application.port.out.GroupRoleRepositoryPort; import flipnote.group.domain.model.member.GroupMemberRole;