diff --git a/src/main/java/flipnote/group/adapter/in/web/GroupController.java b/src/main/java/flipnote/group/adapter/in/web/GroupController.java index cd0ed6a..4f6c01b 100644 --- a/src/main/java/flipnote/group/adapter/in/web/GroupController.java +++ b/src/main/java/flipnote/group/adapter/in/web/GroupController.java @@ -15,6 +15,7 @@ import flipnote.group.api.dto.request.CreateGroupRequestDto; import flipnote.group.api.dto.response.ChangeGroupResponseDto; import flipnote.group.api.dto.response.CreateGroupResponseDto; +import flipnote.group.api.dto.response.FindGroupMemberResponseDto; import flipnote.group.api.dto.response.FindGroupResponseDto; import flipnote.group.application.port.in.ChangeGroupUseCase; import flipnote.group.application.port.in.CreateGroupUseCase; @@ -24,6 +25,7 @@ import flipnote.group.application.port.in.command.CreateGroupCommand; import flipnote.group.application.port.in.command.DeleteGroupCommand; import flipnote.group.application.port.in.command.FindGroupCommand; +import flipnote.group.application.port.in.command.FindGroupMemberCommand; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -125,8 +127,7 @@ public ResponseEntity findGroup( @DeleteMapping("/{groupId}") public ResponseEntity deleteGroup( @RequestHeader("X-USER-ID") Long userId, - @PathVariable("groupId") Long groupId - ) { + @PathVariable("groupId") Long groupId) { DeleteGroupCommand cmd = new DeleteGroupCommand(userId, groupId); @@ -134,8 +135,6 @@ public ResponseEntity deleteGroup( return ResponseEntity.noContent().build(); } - - //todo 그룹 내 멤버 조회 //todo 그룹 전체 조회 @@ -143,6 +142,5 @@ public ResponseEntity deleteGroup( //todo 내가 생성한 그룹 전체 조회 - //todo 하위 권한 수정 } diff --git a/src/main/java/flipnote/group/adapter/in/web/InvitationController.java b/src/main/java/flipnote/group/adapter/in/web/InvitationController.java new file mode 100644 index 0000000..f4fb50e --- /dev/null +++ b/src/main/java/flipnote/group/adapter/in/web/InvitationController.java @@ -0,0 +1,18 @@ +package flipnote.group.adapter.in.web; + +public class InvitationController { + //todo 가인 신청 요청 + + //todo 그룹 내 가입 신청한 리스트 조회 + + //todo 가입신청 응답 + + //todo 가입신청 삭제 + + //todo 내가 신청한 가입신청 리스트 조회 + + //todo 초대 + + //todo 그룹 멤버 추방 + +} diff --git a/src/main/java/flipnote/group/adapter/in/web/MemberController.java b/src/main/java/flipnote/group/adapter/in/web/MemberController.java index 8023df8..4b7ad6f 100644 --- a/src/main/java/flipnote/group/adapter/in/web/MemberController.java +++ b/src/main/java/flipnote/group/adapter/in/web/MemberController.java @@ -1,18 +1,44 @@ package flipnote.group.adapter.in.web; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import flipnote.group.api.dto.response.FindGroupMemberResponseDto; +import flipnote.group.application.port.in.FindGroupMemberUseCase; +import flipnote.group.application.port.in.command.FindGroupMemberCommand; +import flipnote.group.application.port.in.result.FindGroupMemberResult; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/v1/groups/{groupId}") public class MemberController { - //todo 가인 신청 요청 - - //todo 그룹 내 가입 신청한 리스트 조회 - - //todo 가입신청 응답 - - //todo 가입신청 삭제 - - //todo 내가 신청한 가입신청 리스트 조회 - //todo 초대 + private final FindGroupMemberUseCase findGroupMemberUseCase; + + /** + * 그룹 내 멤버 전체 조회 + * @param userId + * @param groupId + * @return + */ + @GetMapping("/members") + public ResponseEntity findGroupMembers( + @RequestHeader("X-USER-ID") Long userId, + @PathVariable("groupId") Long groupId) { + + FindGroupMemberCommand cmd = new FindGroupMemberCommand(userId, groupId); + + FindGroupMemberResult result = findGroupMemberUseCase.findGroupMember(cmd); + + FindGroupMemberResponseDto res = FindGroupMemberResponseDto.from(result); - //todo 그룹 멤버 추방 + return ResponseEntity.ok(res); + } + //todo 하위 권한 수정 } diff --git a/src/main/java/flipnote/group/adapter/out/entity/GroupMemberEntity.java b/src/main/java/flipnote/group/adapter/out/entity/GroupMemberEntity.java index ea59dba..cffd076 100644 --- a/src/main/java/flipnote/group/adapter/out/entity/GroupMemberEntity.java +++ b/src/main/java/flipnote/group/adapter/out/entity/GroupMemberEntity.java @@ -6,9 +6,12 @@ import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -40,14 +43,15 @@ public class GroupMemberEntity extends BaseEntity { @Column(name = "user_id", nullable = false) private Long userId; - @Column(name = "group_role_id", nullable = false) - private Long groupRoleId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "group_role_id", nullable = false) + private RoleEntity role; @Builder - private GroupMemberEntity(Long groupId, Long userId, Long groupRoleId) { + private GroupMemberEntity(Long groupId, Long userId, RoleEntity role) { this.groupId = groupId; this.userId = userId; - this.groupRoleId = groupRoleId; + this.role = role; } /** @@ -56,11 +60,11 @@ private GroupMemberEntity(Long groupId, Long userId, Long groupRoleId) { * @param userId * @return */ - public static GroupMemberEntity create(Long groupId, Long userId, Long groupRoleId) { + public static GroupMemberEntity create(Long groupId, Long userId, RoleEntity role) { return GroupMemberEntity.builder() .groupId(groupId) .userId(userId) - .groupRoleId(groupRoleId) + .role(role) .build(); } } 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 3763430..4d126f1 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupMemberRepositoryAdapter.java @@ -1,18 +1,23 @@ package flipnote.group.adapter.out.persistence; +import java.util.List; + import org.springframework.stereotype.Repository; +import flipnote.group.adapter.out.entity.GroupMemberEntity; +import flipnote.group.adapter.out.entity.RoleEntity; import flipnote.group.adapter.out.persistence.mapper.GroupMemberMapper; import flipnote.group.application.port.out.GroupMemberRepositoryPort; -import flipnote.group.domain.model.member.GroupMemberRole; -import flipnote.group.infrastructure.persistence.jpa.GroupMemberRepository; +import flipnote.group.domain.model.member.GroupMember; +import flipnote.group.domain.model.member.MemberInfo; +import flipnote.group.infrastructure.persistence.jpa.GroupMemberRepositoryRepository; import lombok.RequiredArgsConstructor; @Repository @RequiredArgsConstructor public class GroupMemberRepositoryAdapter implements GroupMemberRepositoryPort { - private final GroupMemberRepository groupMemberRepository; + private final GroupMemberRepositoryRepository groupMemberRepository; /** * 그룹 멤버 저장 @@ -20,8 +25,8 @@ public class GroupMemberRepositoryAdapter implements GroupMemberRepositoryPort { * @param userId */ @Override - public void save(Long groupId, Long userId, Long roleId) { - groupMemberRepository.save(GroupMemberMapper.create(groupId, userId, roleId)); + public void save(Long groupId, Long userId, RoleEntity role) { + groupMemberRepository.save(GroupMemberMapper.create(groupId, userId, role)); } /** @@ -31,7 +36,26 @@ public void save(Long groupId, Long userId, Long roleId) { * @return */ @Override - public boolean existsUserInGroup(Long groupId, Long userId) { - return groupMemberRepository.existsByGroupIdAndUserId(groupId, userId); + public void existsUserInGroup(Long groupId, Long userId) { + + boolean isMember = groupMemberRepository.existsByGroupIdAndUserId(groupId, userId); + + if(!isMember) { + throw new IllegalArgumentException("user not in Group"); + } + } + + /** + * 그룹 멤버 아이디 조회 + * @param groupId + * @return + */ + @Override + public List findMemberInfo(Long groupId) { + List entities = groupMemberRepository.findAllByGroupId(groupId); + + List memberInfo = GroupMemberMapper.toMemberInfo(entities); + + return memberInfo; } } 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 ca757da..aadb25c 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/GroupRoleRepositoryAdapter.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.springframework.stereotype.Repository; @@ -11,7 +12,7 @@ import flipnote.group.application.port.out.GroupRoleRepositoryPort; import flipnote.group.domain.model.member.GroupMemberRole; import flipnote.group.domain.model.permission.GroupPermission; -import flipnote.group.infrastructure.persistence.jpa.GroupMemberRepository; +import flipnote.group.infrastructure.persistence.jpa.GroupMemberRepositoryRepository; import flipnote.group.infrastructure.persistence.jpa.GroupRolePermissionRepository; import flipnote.group.infrastructure.persistence.jpa.GroupRoleRepository; import lombok.RequiredArgsConstructor; @@ -22,7 +23,7 @@ public class GroupRoleRepositoryAdapter implements GroupRoleRepositoryPort { private final GroupRoleRepository groupRoleRepository; private final GroupRolePermissionRepository groupRolePermissionRepository; - private final GroupMemberRepository groupMemberRepository; + private final GroupMemberRepositoryRepository groupMemberRepository; private static final Map> DEFAULT_PERMS_BY_ROLE = Map.of( @@ -47,30 +48,33 @@ public class GroupRoleRepositoryAdapter implements GroupRoleRepositoryPort { * @return */ @Override - public Long create(Long groupId) { - // 오너 역할 생성 - Map roleIdByRole = Arrays.stream(new GroupMemberRole[]{ + public RoleEntity create(Long groupId) { + // 역할 생성 + Map roleEntityByRole = + Arrays.stream(new GroupMemberRole[]{ GroupMemberRole.OWNER, GroupMemberRole.HEAD_MANAGER, GroupMemberRole.MANAGER, GroupMemberRole.MEMBER - }) - .collect(java.util.stream.Collectors.toMap( + }).collect(Collectors.toMap( role -> role, - role -> groupRoleRepository.save(RoleEntity.create(groupId, role)).getId() + role -> groupRoleRepository.save(RoleEntity.create(groupId, role)) )); - // 역할별 기본 권한 세팅 (role-permission 매핑 생성) + // 권한 매핑 생성 List perms = DEFAULT_PERMS_BY_ROLE.entrySet().stream() .flatMap(e -> e.getValue().stream() - .map(p -> PermissionEntity.create(roleIdByRole.get(e.getKey()), p)) + .map(p -> PermissionEntity.create( + roleEntityByRole.get(e.getKey()).getId(), // roleId 사용 + p + )) ) .toList(); groupRolePermissionRepository.saveAll(perms); // 그룹 생성자에게 OWNER roleId 리턴 (바깥에서 group_members 생성할 때 사용) - return roleIdByRole.get(GroupMemberRole.OWNER); + return roleEntityByRole.get(GroupMemberRole.OWNER); } /** diff --git a/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMemberMapper.java b/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMemberMapper.java index 4dbacc2..88325c0 100644 --- a/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMemberMapper.java +++ b/src/main/java/flipnote/group/adapter/out/persistence/mapper/GroupMemberMapper.java @@ -1,16 +1,56 @@ package flipnote.group.adapter.out.persistence.mapper; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import org.springframework.stereotype.Component; import flipnote.group.adapter.out.entity.GroupMemberEntity; +import flipnote.group.adapter.out.entity.RoleEntity; +import flipnote.group.domain.model.member.GroupMember; import flipnote.group.domain.model.member.GroupMemberRole; +import flipnote.group.domain.model.member.MemberInfo; import lombok.AccessLevel; import lombok.NoArgsConstructor; @Component @NoArgsConstructor(access = AccessLevel.PRIVATE) public class GroupMemberMapper { - public static GroupMemberEntity create(Long groupId, Long userId, Long roleId) { - return GroupMemberEntity.create(groupId, userId, roleId); + public static GroupMemberEntity create(Long groupId, Long userId, RoleEntity role) { + return GroupMemberEntity.create(groupId, userId, role); + } + + public static GroupMember toDomain(GroupMemberEntity entity) { + + if (entity == null) { + return null; + } + + return GroupMember.builder() + .id(entity.getId()) + .groupId(entity.getGroupId()) + .role(entity.getRole()) + .build(); } + + /** + * 그룹 멤버 정보 전체 조회 + * @param entities + * @return + */ + public static List toMemberInfo(List entities) { + if (entities == null || entities.isEmpty()) { + return Collections.emptyList(); + } + + return entities.stream() + .map(entity -> MemberInfo.builder() + .userId(entity.getUserId()) + .role(entity.getRole().getRole()) + .build() + ) + .toList(); + } + } diff --git a/src/main/java/flipnote/group/api/dto/response/FindGroupMemberResponseDto.java b/src/main/java/flipnote/group/api/dto/response/FindGroupMemberResponseDto.java new file mode 100644 index 0000000..2a47a88 --- /dev/null +++ b/src/main/java/flipnote/group/api/dto/response/FindGroupMemberResponseDto.java @@ -0,0 +1,15 @@ +package flipnote.group.api.dto.response; + +import java.util.List; + +import flipnote.group.application.port.in.result.FindGroupMemberResult; +import flipnote.group.domain.model.member.MemberInfo; + +public record FindGroupMemberResponseDto( + List memberInfoList +) { + + public static FindGroupMemberResponseDto from(FindGroupMemberResult result) { + return new FindGroupMemberResponseDto(result.memberInfoList()); + } +} diff --git a/src/main/java/flipnote/group/application/port/in/FindGroupMemberUseCase.java b/src/main/java/flipnote/group/application/port/in/FindGroupMemberUseCase.java new file mode 100644 index 0000000..4c6078c --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/FindGroupMemberUseCase.java @@ -0,0 +1,8 @@ +package flipnote.group.application.port.in; + +import flipnote.group.application.port.in.command.FindGroupMemberCommand; +import flipnote.group.application.port.in.result.FindGroupMemberResult; + +public interface FindGroupMemberUseCase { + FindGroupMemberResult findGroupMember(FindGroupMemberCommand cmd); +} diff --git a/src/main/java/flipnote/group/application/port/in/command/FindGroupMemberCommand.java b/src/main/java/flipnote/group/application/port/in/command/FindGroupMemberCommand.java new file mode 100644 index 0000000..70f932a --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/command/FindGroupMemberCommand.java @@ -0,0 +1,7 @@ +package flipnote.group.application.port.in.command; + +public record FindGroupMemberCommand( + Long userId, + Long groupId +) { +} diff --git a/src/main/java/flipnote/group/application/port/in/result/FindGroupMemberResult.java b/src/main/java/flipnote/group/application/port/in/result/FindGroupMemberResult.java new file mode 100644 index 0000000..fe0dfe2 --- /dev/null +++ b/src/main/java/flipnote/group/application/port/in/result/FindGroupMemberResult.java @@ -0,0 +1,10 @@ +package flipnote.group.application.port.in.result; + +import java.util.List; + +import flipnote.group.domain.model.member.MemberInfo; + +public record FindGroupMemberResult( + List memberInfoList +) { +} 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 5f93ec1..675ccbf 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupMemberRepositoryPort.java @@ -1,7 +1,14 @@ package flipnote.group.application.port.out; +import java.util.List; + +import flipnote.group.adapter.out.entity.RoleEntity; +import flipnote.group.domain.model.member.MemberInfo; + public interface GroupMemberRepositoryPort { - void save(Long groupId, Long userId, Long roleId); + void save(Long groupId, Long userId, RoleEntity role); + + void existsUserInGroup(Long groupId, Long userId); - boolean existsUserInGroup(Long groupId, Long userId); + List findMemberInfo(Long groupId); } 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 bb61247..aa5b0ae 100644 --- a/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java +++ b/src/main/java/flipnote/group/application/port/out/GroupRoleRepositoryPort.java @@ -1,9 +1,10 @@ package flipnote.group.application.port.out; +import flipnote.group.adapter.out.entity.RoleEntity; import flipnote.group.domain.model.member.GroupMemberRole; public interface GroupRoleRepositoryPort { - Long create(Long groupId); + RoleEntity create(Long groupId); boolean checkRole(Long userId, Long groupId, GroupMemberRole groupMemberRole); } diff --git a/src/main/java/flipnote/group/application/service/CreateGroupService.java b/src/main/java/flipnote/group/application/service/CreateGroupService.java index 89db017..0e1b6c4 100644 --- a/src/main/java/flipnote/group/application/service/CreateGroupService.java +++ b/src/main/java/flipnote/group/application/service/CreateGroupService.java @@ -3,6 +3,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import flipnote.group.adapter.out.entity.RoleEntity; import flipnote.group.adapter.out.persistence.mapper.GroupMapper; import flipnote.group.application.port.in.CreateGroupUseCase; import flipnote.group.application.port.in.command.CreateGroupCommand; @@ -37,10 +38,10 @@ public CreateGroupResult create(CreateGroupCommand cmd) { Long groupId = groupRepository.saveNewGroup(domainGroup); //그룹 역할 생성 - Long roleId = groupRoleRepository.create(groupId); + RoleEntity role = groupRoleRepository.create(groupId); //생성자 오너 역할로 저장 - groupMemberRepository.save(groupId, cmd.userId(), roleId); + groupMemberRepository.save(groupId, cmd.userId(), role); return new CreateGroupResult(groupId); } diff --git a/src/main/java/flipnote/group/application/service/FindGroupMemberService.java b/src/main/java/flipnote/group/application/service/FindGroupMemberService.java new file mode 100644 index 0000000..ad7941f --- /dev/null +++ b/src/main/java/flipnote/group/application/service/FindGroupMemberService.java @@ -0,0 +1,36 @@ +package flipnote.group.application.service; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import flipnote.group.application.port.in.FindGroupMemberUseCase; +import flipnote.group.application.port.in.command.FindGroupMemberCommand; +import flipnote.group.application.port.in.result.FindGroupMemberResult; +import flipnote.group.application.port.out.GroupMemberRepositoryPort; +import flipnote.group.domain.model.member.MemberInfo; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class FindGroupMemberService implements FindGroupMemberUseCase { + + private final GroupMemberRepositoryPort groupMemberRepository; + + /** + * 그룹 멤버 조회 + * @param cmd + * @return + */ + @Override + public FindGroupMemberResult findGroupMember(FindGroupMemberCommand cmd) { + + groupMemberRepository.existsUserInGroup(cmd.groupId(), cmd.userId()); + + List memberInfoList = groupMemberRepository.findMemberInfo(cmd.groupId()); + + //todo 멤버 정보에서 유저 아이디를 grpc를 통해 가져온 후 반환 + + return new FindGroupMemberResult(memberInfoList); + } +} diff --git a/src/main/java/flipnote/group/application/service/FindGroupService.java b/src/main/java/flipnote/group/application/service/FindGroupService.java index 3e0673d..4e01d1d 100644 --- a/src/main/java/flipnote/group/application/service/FindGroupService.java +++ b/src/main/java/flipnote/group/application/service/FindGroupService.java @@ -30,11 +30,7 @@ public class FindGroupService implements FindGroupUseCase { public FindGroupResult findGroup(FindGroupCommand cmd) { // 유저가 그룹 내에 존재하는지 확인 - boolean isMember = groupMemberRepository.existsUserInGroup(cmd.groupId(), cmd.userId()); - - if(!isMember) { - throw new IllegalArgumentException("user not in Group"); - } + groupMemberRepository.existsUserInGroup(cmd.groupId(), cmd.userId()); Group group = groupRepository.findById(cmd.groupId()); diff --git a/src/main/java/flipnote/group/domain/model/group/GroupId.java b/src/main/java/flipnote/group/domain/model/group/GroupId.java deleted file mode 100644 index 7467641..0000000 --- a/src/main/java/flipnote/group/domain/model/group/GroupId.java +++ /dev/null @@ -1,4 +0,0 @@ -package flipnote.group.domain.model.group; - -public record GroupId(Long value) { -} diff --git a/src/main/java/flipnote/group/domain/model/member/GroupMember.java b/src/main/java/flipnote/group/domain/model/member/GroupMember.java index a08555c..6748918 100644 --- a/src/main/java/flipnote/group/domain/model/member/GroupMember.java +++ b/src/main/java/flipnote/group/domain/model/member/GroupMember.java @@ -1,47 +1,24 @@ package flipnote.group.domain.model.member; -import flipnote.group.domain.model.group.GroupId; -import flipnote.group.domain.model.user.UserId; +import flipnote.group.adapter.out.entity.RoleEntity; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @Getter -@Setter @NoArgsConstructor(access = AccessLevel.PRIVATE) public class GroupMember { private Long id; - private GroupId groupId; - private UserId userId; - private GroupMemberRole role; + private Long groupId; + private Long userId; + private RoleEntity role; - /** - * 유저가 오너일 경우 - * @param groupId - * @param ownerUserId - * @return - */ - public static GroupMember createOwner(GroupId groupId, UserId ownerUserId) { - GroupMember gm = new GroupMember(); - gm.groupId = groupId; - gm.userId = ownerUserId; - gm.role = GroupMemberRole.OWNER; - return gm; + @Builder + private GroupMember(Long id, Long groupId, Long userId, RoleEntity role) { + this.id = id; + this.groupId = groupId; + this.userId = userId; + this.role = role; } - - /** - * 오너가 아닐 경우 - * @param groupId - * @param userId - * @return - */ - public static GroupMember join(GroupId groupId, UserId userId) { - GroupMember gm = new GroupMember(); - gm.groupId = groupId; - gm.userId = userId; - gm.role = GroupMemberRole.MEMBER; - return gm; - } - } diff --git a/src/main/java/flipnote/group/domain/model/member/MemberInfo.java b/src/main/java/flipnote/group/domain/model/member/MemberInfo.java new file mode 100644 index 0000000..ddc7390 --- /dev/null +++ b/src/main/java/flipnote/group/domain/model/member/MemberInfo.java @@ -0,0 +1,19 @@ +package flipnote.group.domain.model.member; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class MemberInfo { + private Long userId; + private GroupMemberRole role; + + @Builder + private MemberInfo(Long userId, GroupMemberRole role) { + this.userId = userId; + this.role = role; + } +} diff --git a/src/main/java/flipnote/group/domain/model/user/UserId.java b/src/main/java/flipnote/group/domain/model/user/UserId.java deleted file mode 100644 index 1545b53..0000000 --- a/src/main/java/flipnote/group/domain/model/user/UserId.java +++ /dev/null @@ -1,4 +0,0 @@ -package flipnote.group.domain.model.user; - -public record UserId(Long value) { -} diff --git a/src/main/java/flipnote/group/infrastructure/config/QuerydslConfig.java b/src/main/java/flipnote/group/infrastructure/config/QuerydslConfig.java new file mode 100644 index 0000000..d1a24f8 --- /dev/null +++ b/src/main/java/flipnote/group/infrastructure/config/QuerydslConfig.java @@ -0,0 +1,20 @@ +package flipnote.group.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.querydsl.jpa.impl.JPAQueryFactory; + +import jakarta.persistence.EntityManager; +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class QuerydslConfig { + private final EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +} diff --git a/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepository.java b/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepository.java deleted file mode 100644 index b0294a5..0000000 --- a/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package flipnote.group.infrastructure.persistence.jpa; - -import org.springframework.data.jpa.repository.JpaRepository; - -import flipnote.group.adapter.out.entity.GroupMemberEntity; - -public interface GroupMemberRepository extends JpaRepository { - boolean existsByUserIdAndGroupRoleId(Long userId, Long id); - - boolean existsByGroupIdAndUserId(Long groupId, Long userId); -} diff --git a/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepositoryRepository.java b/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepositoryRepository.java new file mode 100644 index 0000000..1e35aae --- /dev/null +++ b/src/main/java/flipnote/group/infrastructure/persistence/jpa/GroupMemberRepositoryRepository.java @@ -0,0 +1,23 @@ +package flipnote.group.infrastructure.persistence.jpa; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import flipnote.group.adapter.out.entity.GroupMemberEntity; + +public interface GroupMemberRepositoryRepository + extends JpaRepository { + boolean existsByUserIdAndGroupRoleId(Long userId, Long id); + + boolean existsByGroupIdAndUserId(Long groupId, Long userId); + + @Query(""" + select gm + from GroupMemberEntity gm + join fetch gm.role gr + where gm.groupId = :groupId +""") + List findAllByGroupId(Long groupId); +}