From 5ec883171d938e742cabff425f6d9e902a8ce625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=8A=AC=EA=B8=B0?= <84620016+seulgi99@users.noreply.github.com> Date: Wed, 31 Jan 2024 00:16:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=96=B4=EB=93=9C=EB=AF=BC=20:=20=EB=B3=B8?= =?UTF-8?q?=EC=82=AC=EC=97=90=20=EC=9D=98=ED=95=9C=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20=EC=97=AD=ED=95=A0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#80)=20(#85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat : 본사 회원 조회 api * feat : 본사 회원 조회 api * refact : 회원 삭제 * refact : 회원 역할 수정 * refact : 본사에 의한 회원 조회 및 역할 수정 * refact : 본사에 의한 회원 조회 * refact : 역할 수정 에러 해결 Co-authored-by: Songhyeon Seo --- .../controller/HeadquatersController.java | 5 ++- .../dto/request/UpdateUserRequestDto.java | 3 +- .../usecase/FindAllByHeadqueatersUseCase.java | 16 +++----- .../adminUser/usecase/UpdateUserUseCase.java | 2 +- .../univ/domain/user/adaptor/UserAdaptor.java | 13 +----- .../user/repository/UserCustomRepository.java | 2 + .../user/repository/UserRepository.java | 22 ---------- .../impl/UserCustomRepositoryImpl.java | 40 +++++++++++++++++-- .../user/service/UserDomainService.java | 5 ++- 9 files changed, 54 insertions(+), 54 deletions(-) diff --git a/likelion-admin/src/main/java/likelion/univ/adminUser/controller/HeadquatersController.java b/likelion-admin/src/main/java/likelion/univ/adminUser/controller/HeadquatersController.java index 366bf633..a3b3bb38 100644 --- a/likelion-admin/src/main/java/likelion/univ/adminUser/controller/HeadquatersController.java +++ b/likelion-admin/src/main/java/likelion/univ/adminUser/controller/HeadquatersController.java @@ -5,6 +5,7 @@ import likelion.univ.adminUser.dto.response.UserInfoResponseDto; import likelion.univ.adminUser.usecase.FindAllByHeadqueatersUseCase; import likelion.univ.common.response.PageResponse; +import likelion.univ.domain.user.entity.Role; import likelion.univ.response.SuccessResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,8 +32,8 @@ public class HeadquatersController { public SuccessResponse> findUsersByUnivOfUser( @ParameterObject @PageableDefault(size=12, page = 0, sort="createdDate", direction = Sort.Direction.DESC) Pageable pageable, - @RequestParam(required = false) String role, @RequestParam(required = false) String univName) { - PageResponse response = findAllByHeadqueatersUseCase.execute(pageable, role, univName); + @RequestParam(required = false) Role role, @RequestParam(required = false) String univName) { + PageResponse response = findAllByHeadqueatersUseCase.execute(role, univName, pageable); return SuccessResponse.of(response); } diff --git a/likelion-admin/src/main/java/likelion/univ/adminUser/dto/request/UpdateUserRequestDto.java b/likelion-admin/src/main/java/likelion/univ/adminUser/dto/request/UpdateUserRequestDto.java index d186e9cb..8363424c 100644 --- a/likelion-admin/src/main/java/likelion/univ/adminUser/dto/request/UpdateUserRequestDto.java +++ b/likelion-admin/src/main/java/likelion/univ/adminUser/dto/request/UpdateUserRequestDto.java @@ -1,6 +1,7 @@ package likelion.univ.adminUser.dto.request; import io.swagger.v3.oas.annotations.media.Schema; +import likelion.univ.domain.user.entity.Role; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -26,7 +27,7 @@ public class UpdateUserRequestDto { private Long ordinal; @NotBlank @Schema(description = "역할", example = "MANAGER", required = true) - private String role; + private Role role; } \ No newline at end of file diff --git a/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/FindAllByHeadqueatersUseCase.java b/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/FindAllByHeadqueatersUseCase.java index 553ef1ba..726ca66e 100644 --- a/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/FindAllByHeadqueatersUseCase.java +++ b/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/FindAllByHeadqueatersUseCase.java @@ -16,17 +16,11 @@ public class FindAllByHeadqueatersUseCase { private final UserAdaptor userAdaptor; - public PageResponse execute(Pageable pageable, String role, String univName){ - Page users = userAdaptor.findAllWithUniversity(pageable); - if (role != null && univName == null) { - users = userAdaptor.findByRole(Role.valueOf(role), pageable); - }else if (role == null && univName != null) { - users = userAdaptor.findByUnivName(univName, pageable); - }else if (role != null && univName != null){ - users = userAdaptor.findByUnivNameAndRole(Role.valueOf(role), univName, pageable); - } + public PageResponse execute(Role role, String univName, Pageable pageable) { - return PageResponse.of(users.map(u-> UserInfoResponseDto.of(u))); - } + Page users = userAdaptor.findByUnivNameAndRole(role, univName, pageable); + + return PageResponse.of(users.map(u -> UserInfoResponseDto.of(u))); + } } diff --git a/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/UpdateUserUseCase.java b/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/UpdateUserUseCase.java index d6d09caa..fd89a0b4 100644 --- a/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/UpdateUserUseCase.java +++ b/likelion-admin/src/main/java/likelion/univ/adminUser/usecase/UpdateUserUseCase.java @@ -18,7 +18,7 @@ public class UpdateUserUseCase { public UserInfoResponseDto execute(Long userId, UpdateUserRequestDto updateUserRequestDto){ - User user = userAdaptor.findById(userId); + User user = userAdaptor.findByIdWithUniversity(userId); userDomainService.updateUser(user, updateUserRequestDto.getName(), updateUserRequestDto.getPart(),updateUserRequestDto.getMajor(), updateUserRequestDto.getOrdinal(), updateUserRequestDto.getRole()); diff --git a/likelion-core/src/main/java/likelion/univ/domain/user/adaptor/UserAdaptor.java b/likelion-core/src/main/java/likelion/univ/domain/user/adaptor/UserAdaptor.java index 8ac2e877..c7509e7f 100644 --- a/likelion-core/src/main/java/likelion/univ/domain/user/adaptor/UserAdaptor.java +++ b/likelion-core/src/main/java/likelion/univ/domain/user/adaptor/UserAdaptor.java @@ -41,19 +41,10 @@ public Page findByUniversityInfoUniversityId(Long id, Pageable pageable) { return userRepository.findByUniversityInfoUniversityId(id, pageable); } - - public Page findAll(Pageable pageable) { - return userRepository.findAll(pageable); - } - public Page findByUnivName(String univName, Pageable pageable){ - return userRepository.findByUniversityInfoUniversityName(univName, pageable); - } - public Page findByRole(Role role, Pageable pageable){ - return userRepository.findByAuthInfoRole(role, pageable); - } - public Page findByUnivNameAndRole(Role role, String univName, Pageable pageable){ + public Page findByUnivNameAndRole(Role role, String univName, Pageable pageable) { return userRepository.findByUnivNameAndRole(role, univName, pageable); } + public List findDynamicUsers(UserSearchCondition condition) { return userRepository.findDynamicUsers(condition); } diff --git a/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserCustomRepository.java b/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserCustomRepository.java index c8e70c88..939c8bdf 100644 --- a/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserCustomRepository.java +++ b/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserCustomRepository.java @@ -1,5 +1,6 @@ package likelion.univ.domain.user.repository; +import likelion.univ.domain.user.entity.Role; import likelion.univ.domain.user.entity.User; import likelion.univ.domain.user.repository.searchcondition.UserSearchCondition; import org.springframework.data.domain.Page; @@ -15,4 +16,5 @@ public interface UserCustomRepository { Slice searchByName(String name, Pageable pageable); List findMyFollowingUsersByFollowingIdIn(Long followerId, List followingIdList); Page findAllWithUniversity(Pageable pageable); + Page findByUnivNameAndRole(Role role, String univName, Pageable pageable); } diff --git a/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserRepository.java b/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserRepository.java index f58e52b4..c16f7718 100644 --- a/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserRepository.java +++ b/likelion-core/src/main/java/likelion/univ/domain/user/repository/UserRepository.java @@ -18,28 +18,6 @@ public interface UserRepository extends JpaRepository, UserCustomRepo countQuery = "SELECT count(u.id) FROM User u join u.universityInfo.university " + "where u.universityInfo.university.id = :univId and u.authInfo.accountStatus= 'ACTIVE'") Page findByUniversityInfoUniversityId(Long univId, Pageable pageable); - @Query(value = "SELECT u FROM User u join fetch u.universityInfo.university " + - "where u.universityInfo.university.name like :univName% and u.authInfo.role = :role " + - "and u.authInfo.accountStatus= 'ACTIVE'", - countQuery = "SELECT count(u.id) FROM User u join u.universityInfo.university " + - "where u.universityInfo.university.name like :univName% and u.authInfo.role = :role " + - "and u.authInfo.accountStatus= 'ACTIVE'") - Page findByUnivNameAndRole(Role role, String univName, Pageable pageable); - @Query(value = "SELECT u FROM User u " + - "where u.authInfo.accountStatus= 'ACTIVE'", - countQuery = "SELECT count(u.id) FROM User u " + - "where u.authInfo.accountStatus= 'ACTIVE'") - Page findAll(Pageable pageable); - @Query(value = "SELECT u FROM User u join fetch u.universityInfo.university " + - "where u.universityInfo.university.name like :univName% and u.authInfo.accountStatus= 'ACTIVE'", - countQuery = "SELECT count(u.id) FROM User u join u.universityInfo.university " + - "where u.universityInfo.university.name like :univName% and u.authInfo.accountStatus= 'ACTIVE'") - Page findByUniversityInfoUniversityName(String univName, Pageable pageable); - @Query(value = "SELECT u FROM User u join fetch u.universityInfo.university " + - "where u.authInfo.role = :role and u.authInfo.accountStatus= 'ACTIVE'", - countQuery = "SELECT count(u.id) FROM User u join u.universityInfo.university " + - "where u.authInfo.role = :role and u.authInfo.accountStatus= 'ACTIVE'") - Page findByAuthInfoRole(Role role, Pageable pageable); @Query(value = "SELECT u FROM User u join fetch u.universityInfo.university where u.id = :id ") Optional findByIdWithUniversity(Long id); diff --git a/likelion-core/src/main/java/likelion/univ/domain/user/repository/impl/UserCustomRepositoryImpl.java b/likelion-core/src/main/java/likelion/univ/domain/user/repository/impl/UserCustomRepositoryImpl.java index 5cbd12cf..4a0c9eff 100644 --- a/likelion-core/src/main/java/likelion/univ/domain/user/repository/impl/UserCustomRepositoryImpl.java +++ b/likelion-core/src/main/java/likelion/univ/domain/user/repository/impl/UserCustomRepositoryImpl.java @@ -12,14 +12,12 @@ import likelion.univ.common.processor.ConvertSliceProcessor; import likelion.univ.domain.user.entity.AccountStatus; import likelion.univ.domain.user.entity.Part; +import likelion.univ.domain.user.entity.Role; import likelion.univ.domain.user.entity.User; import likelion.univ.domain.user.repository.UserCustomRepository; import likelion.univ.domain.user.repository.searchcondition.UserSearchCondition; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; +import org.springframework.data.domain.*; import org.springframework.data.support.PageableExecutionUtils; import org.springframework.util.StringUtils; @@ -53,11 +51,45 @@ private BooleanExpression containsName(String searchName) { private BooleanExpression eqUniversity(String searchUniversity) { return searchUniversity != null ? user.universityInfo.university.name.eq(searchUniversity) : null; } + private BooleanExpression startsWithUniversity(String searchUniversity) { + return StringUtils.hasText(searchUniversity) ? + user.universityInfo.university.name.startsWith(searchUniversity) : null; + } private BooleanExpression eqPart(String searchPart) { return searchPart != null ? user.profile.part.eq(Part.valueOf(searchPart)) : null; } + private BooleanExpression eqRole(Role role) { + return role != null ? + switch (role){ + case GUEST -> user.authInfo.role.eq(Role.GUEST); + case USER -> user.authInfo.role.eq(Role.USER); + case MANAGER -> user.authInfo.role.eq(Role.MANAGER); + case UNIVERSITY_ADMIN -> user.authInfo.role.eq(Role.UNIVERSITY_ADMIN); + case SUPER_ADMIN -> user.authInfo.role.eq(Role.SUPER_ADMIN); + } + : null; + } + + + @Override + public Page findByUnivNameAndRole(Role role, String univName, Pageable pageable){ + List users = + queryFactory + .select(user) + .from(user) + .innerJoin(user.universityInfo.university, university).fetchJoin() + .where(startsWithUniversity(univName), + eqRole(role), + user.authInfo.accountStatus.eq(AccountStatus.ACTIVE)) + .orderBy(user.createdDate.desc()) + .fetch(); + + return new PageImpl<>(users, pageable, users.size()); + + } + @Override public Slice findFollowingUsersByFollowerID(Long followerId, Pageable pageable){ diff --git a/likelion-core/src/main/java/likelion/univ/domain/user/service/UserDomainService.java b/likelion-core/src/main/java/likelion/univ/domain/user/service/UserDomainService.java index 932369d1..bfde77ae 100644 --- a/likelion-core/src/main/java/likelion/univ/domain/user/service/UserDomainService.java +++ b/likelion-core/src/main/java/likelion/univ/domain/user/service/UserDomainService.java @@ -45,13 +45,14 @@ public User editProfile(Long userId, Profile profile){ return user; } + @Transactional public void updateUser(User user, String name, String part, - String major, Long ordinal, String role){ + String major, Long ordinal, Role role){ user.getProfile().updateProfile(name,Part.valueOf(part)); user.getUniversityInfo().updateUniversityInfo(major,ordinal); - user.getAuthInfo().updateRole(Role.valueOf(role)); + user.getAuthInfo().updateRole(role); userAdaptor.save(user); }