Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<AddPermissionResponseDto> addDownPermission(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId,
Expand All @@ -54,8 +60,8 @@ public ResponseEntity<AddPermissionResponseDto> addDownPermission(
* @param req
* @return
*/
@DeleteMapping("/permissions")
public ResponseEntity<?> changeDownPermission(
@DeleteMapping("")
public ResponseEntity<RemovePermissionResponseDto> changeDownPermission(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId,
@Valid @RequestBody RemovePermissionRequestDto req) {
Expand All @@ -69,8 +75,27 @@ public ResponseEntity<?> changeDownPermission(
return ResponseEntity.ok(res);
}

/**
* 특정 그룹 내 권한 확인
* @param userId
* @param groupId
* @return
*/
@GetMapping("")
public ResponseEntity<MyPermissionResponseDto> 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 가입 신청 허가
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,20 @@ public List<GroupPermission> removePermission(Long groupId, GroupMemberRole role
.map(PermissionEntity::getPermission)
.toList();
}


@Override
public List<GroupPermission> findMyRolePermission(Long groupId, GroupMemberRole role) {

RoleEntity roleEntity = groupRoleRepository.findByGroupIdAndRole(groupId, role).orElseThrow(
() -> new IllegalArgumentException("not exists member")
);

List<PermissionEntity> permissions = groupRolePermissionRepository.findAllByGroupRoleId(
roleEntity.getId());

return permissions.stream()
.map(PermissionEntity::getPermission)
.toList();
}
}
Original file line number Diff line number Diff line change
@@ -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<GroupPermission> permissions
) {
public static MyPermissionResponseDto from(MyPermissionResult result) {
return new MyPermissionResponseDto(result.role(), result.permissions());
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package flipnote.group.application.port.in.command;

public record MyPermissionCommand(
Long groupId,
Long userId
) {
}
Original file line number Diff line number Diff line change
@@ -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<GroupPermission> permissions
) {
public static MyPermissionResult of(GroupMemberRole role, List<GroupPermission> permissions) {
return new MyPermissionResult(role, permissions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@ public interface GroupMemberRepositoryPort {

List<MemberInfo> findMemberInfo(Long groupId);

GroupMemberEntity findMyRole(Long groupId, Long userId);

boolean checkOwner(Long groupId, Long userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public interface GroupRoleRepositoryPort {

List<GroupPermission> removePermission(Long groupId, GroupMemberRole role, GroupPermission permission);

List<GroupPermission> findMyRolePermission(Long groupId, GroupMemberRole role);

RoleEntity findByIdAndRole(Long id, GroupMemberRole groupMemberRole);

GroupMemberRole findRole(Long userId, Long groupId);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<GroupPermission> permissions = groupRoleRepository.findMyRolePermission(groupMember.getGroupId(), groupMember.getRole().getRole());

return MyPermissionResult.of(groupMember.getRole().getRole(), permissions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down