Skip to content

Commit c6e1f8d

Browse files
authored
Merge pull request #271 from TaskFlow-CLAP/CLAP-243
CLAP-243 회원조회 API 수정
2 parents 67857d4 + 193f98d commit c6e1f8d

10 files changed

Lines changed: 47 additions & 63 deletions

File tree

src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22

33
import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
44
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
5-
import clap.server.application.mapper.RetrieveAllMemberMapper;
6-
import clap.server.application.port.inbound.admin.FindAllMembersUsecase;
5+
import clap.server.adapter.inbound.web.dto.common.PageResponse;
76
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
8-
import clap.server.domain.model.member.Member;
9-
import clap.server.exception.ApplicationException;
10-
import clap.server.exception.code.MemberErrorCode;
117
import io.swagger.v3.oas.annotations.Operation;
128
import io.swagger.v3.oas.annotations.Parameter;
139
import io.swagger.v3.oas.annotations.tags.Tag;
1410
import lombok.RequiredArgsConstructor;
15-
import org.springframework.data.domain.Page;
11+
import jakarta.validation.Valid;
1612
import org.springframework.data.domain.PageRequest;
1713
import org.springframework.data.domain.Pageable;
1814
import org.springframework.http.ResponseEntity;
@@ -23,9 +19,7 @@
2319
@RequestMapping("/api/managements")
2420
@RequiredArgsConstructor
2521
public class FindMemberController {
26-
private final FindAllMembersUsecase findAllMembersUsecase;
2722
private final FindMembersWithFilterUsecase findMembersWithFilterUsecase;
28-
private final RetrieveAllMemberMapper retrieveAllMemberMapper;
2923

3024
@Tag(name = "05. Admin")
3125
@Secured({"ROLE_ADMIN"})
@@ -38,26 +32,13 @@ public class FindMemberController {
3832
}
3933
)
4034
@GetMapping("/members")
41-
public ResponseEntity<Page<RetrieveAllMemberResponse>> getAllMembers(
35+
public ResponseEntity<PageResponse<RetrieveAllMemberResponse>> getAllMembers(
4236
@RequestParam(defaultValue = "0") int page,
4337
@RequestParam(defaultValue = "20") int pageSize,
44-
@RequestBody FindMemberRequest filterRequest) {
45-
46-
if (filterRequest.name() != null && filterRequest.name().trim().isEmpty()) {
47-
throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY);
48-
}
38+
@ModelAttribute @Valid FindMemberRequest filterRequest) {
4939

5040
Pageable pageable = PageRequest.of(page, pageSize);
51-
Page<Member> members;
52-
53-
if (filterRequest.name() != null || filterRequest.email() != null || filterRequest.nickName() != null ||
54-
filterRequest.departmentName() != null || filterRequest.role() != null) {
55-
members = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest);
56-
} else {
57-
members = findAllMembersUsecase.findAllMembers(pageable);
58-
}
59-
60-
Page<RetrieveAllMemberResponse> response = members.map(retrieveAllMemberMapper::toResponse);
41+
PageResponse<RetrieveAllMemberResponse> response = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest);
6142
return ResponseEntity.ok(response);
6243
}
63-
}
44+
}

src/main/java/clap/server/adapter/inbound/web/dto/admin/request/FindMemberRequest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,26 @@
22

33
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
44
import io.swagger.v3.oas.annotations.media.Schema;
5+
import jakarta.validation.constraints.NotNull;
56

67
public record FindMemberRequest(
8+
@NotNull
79
@Schema(description = "회원 이름", example = "양시훈")
810
String name,
911

12+
@NotNull
1013
@Schema(description = "회원 이메일", example = "sihun123@gmail.com")
1114
String email,
1215

16+
@NotNull
1317
@Schema(description = "회원 닉네임", example = "leo.sh")
1418
String nickName,
1519

20+
@NotNull
1621
@Schema(description = "부서 이름", example = "1")
1722
String departmentName,
1823

24+
@NotNull
1925
@Schema(description = "회원 역할", example = "ROLE_USER")
2026
MemberRole role
2127
) {}

src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public Page<Member> findAllMembers(Pageable pageable) {
103103
@Override
104104
public Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
105105
return memberRepository.findMembersWithFilter(pageable, filterRequest).map(memberPersistenceMapper::toDomain);
106-
107106
}
108107
}
109108

src/main/java/clap/server/adapter/outbound/persistense/repository/member/MemberCustomRepositoryImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,17 @@ private BooleanBuilder createMemberFilter(FindMemberRequest filterRequest) {
4646
BooleanBuilder whereClause = new BooleanBuilder();
4747
whereClause.and(memberEntity.status.ne(MemberStatus.DELETED));
4848

49-
if (filterRequest.name() != null) {
49+
if (!filterRequest.name().isBlank()) {
5050
whereClause.and(memberEntity.name.containsIgnoreCase(filterRequest.name()));
5151
}
52-
if (filterRequest.email() != null) {
52+
if (!filterRequest.email().isBlank()) {
5353
whereClause.and(memberEntity.email.containsIgnoreCase(filterRequest.email()));
5454
}
55-
if (filterRequest.nickName() != null) {
55+
if (!filterRequest.nickName().isBlank()) {
5656
whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.nickName()));
5757
}
58-
if (filterRequest.departmentName() != null) {
59-
whereClause.and(memberEntity.department.name.eq(filterRequest.departmentName()));
58+
if (!filterRequest.departmentName().isBlank()) {
59+
whereClause.and(memberEntity.department.name.contains(filterRequest.departmentName()));
6060
}
6161
if (filterRequest.role() != null) {
6262
whereClause.and(memberEntity.role.eq(filterRequest.role()));
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package clap.server.application.port.inbound.admin;
22

3-
import clap.server.domain.model.member.Member;
4-
import org.springframework.data.domain.Page;
3+
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
4+
import clap.server.adapter.inbound.web.dto.common.PageResponse;
55
import org.springframework.data.domain.Pageable;
66

77
public interface FindAllMembersUsecase {
8-
Page<Member> findAllMembers(Pageable pageable);
9-
}
8+
PageResponse<RetrieveAllMemberResponse> findAllMembers(Pageable pageable);
9+
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package clap.server.application.port.inbound.admin;
22

33
import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
4-
import clap.server.domain.model.member.Member;
5-
import org.springframework.data.domain.Page;
4+
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
5+
import clap.server.adapter.inbound.web.dto.common.PageResponse;
6+
67
import org.springframework.data.domain.Pageable;
78

89
public interface FindMembersWithFilterUsecase {
9-
Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
10-
}
10+
PageResponse<RetrieveAllMemberResponse> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
11+
}

src/main/java/clap/server/application/port/inbound/management/FindAllMembersUsecase.java

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +0,0 @@
1-
package clap.server.application.port.inbound.management;
2-
3-
import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
4-
import clap.server.domain.model.member.Member;
5-
import org.springframework.data.domain.Page;
6-
import org.springframework.data.domain.Pageable;
7-
8-
public interface FindMembersWithFilterUsecase {
9-
Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
10-
}
Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
11
package clap.server.application.service.admin;
22

3+
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
4+
import clap.server.adapter.inbound.web.dto.common.PageResponse;
5+
import clap.server.application.mapper.RetrieveAllMemberMapper;
36
import clap.server.application.port.inbound.admin.FindAllMembersUsecase;
47
import clap.server.application.port.outbound.member.LoadMemberPort;
58
import clap.server.domain.model.member.Member;
69
import lombok.RequiredArgsConstructor;
710
import org.springframework.data.domain.Page;
811
import org.springframework.data.domain.Pageable;
912
import org.springframework.stereotype.Service;
13+
import org.springframework.transaction.annotation.Transactional;
1014

1115
@Service
1216
@RequiredArgsConstructor
1317
public class FindAllMembersService implements FindAllMembersUsecase {
1418
private final LoadMemberPort loadMemberPort;
19+
private final RetrieveAllMemberMapper retrieveAllMemberMapper;
1520

21+
22+
@Transactional(readOnly = true)
1623
@Override
17-
public Page<Member> findAllMembers(Pageable pageable) {
18-
return loadMemberPort.findAllMembers(pageable);
24+
public PageResponse<RetrieveAllMemberResponse> findAllMembers(Pageable pageable) {
25+
Page<Member> members = loadMemberPort.findAllMembers(pageable);
26+
return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse));
1927
}
2028
}
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
package clap.server.application.service.admin;
22

3+
34
import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
5+
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
6+
import clap.server.adapter.inbound.web.dto.common.PageResponse;
7+
import clap.server.application.mapper.RetrieveAllMemberMapper;
48
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
59
import clap.server.application.port.outbound.member.LoadMemberPort;
610
import clap.server.domain.model.member.Member;
711
import lombok.RequiredArgsConstructor;
812
import org.springframework.data.domain.Page;
913
import org.springframework.data.domain.Pageable;
1014
import org.springframework.stereotype.Service;
15+
import org.springframework.transaction.annotation.Transactional;
1116

1217
@Service
1318
@RequiredArgsConstructor
1419
public class FindMembersWithFilterService implements FindMembersWithFilterUsecase {
1520
private final LoadMemberPort loadMemberPort;
21+
private final RetrieveAllMemberMapper retrieveAllMemberMapper;
22+
1623

24+
@Transactional(readOnly = true)
1725
@Override
18-
public Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
19-
return loadMemberPort.findMembersWithFilter(pageable, filterRequest);
26+
public PageResponse<RetrieveAllMemberResponse> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
27+
Page<Member> members = loadMemberPort.findMembersWithFilter(pageable, filterRequest);
28+
return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse));
2029
}
2130
}

0 commit comments

Comments
 (0)