Skip to content

Commit fc1d096

Browse files
Sihun23Sihun23
authored andcommitted
CLAP-118 feat:전체 회원 조회 API 구현
1 parent 0408482 commit fc1d096

File tree

8 files changed

+113
-1
lines changed

8 files changed

+113
-1
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package clap.server.adapter.inbound.web.member;
2+
3+
import clap.server.application.mapper.RetrieveAllMemberMapper;
4+
import clap.server.application.port.inbound.management.FindAllMemberUsecase;
5+
import clap.server.domain.model.member.Member;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
import java.util.List;
14+
15+
@RestController
16+
@RequestMapping("/api/members")
17+
@RequiredArgsConstructor
18+
public class MemberController {
19+
private final FindAllMemberUsecase findAllMemberUsecase;
20+
private final RetrieveAllMemberMapper retrieveAllMemberMapper;
21+
22+
@Operation(summary = "전체 회원 조회 API", description = "모든 회원 정보를 반환합니다.")
23+
@GetMapping
24+
public ResponseEntity<List<RetrieveAllMemberResponse>> getAllMembers() {
25+
List<Member> members = findAllMemberUsecase.findAllMembers();
26+
List<RetrieveAllMemberResponse> response = retrieveAllMemberMapper.toResponseList(members);
27+
return ResponseEntity.ok(response);
28+
}
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package clap.server.adapter.inbound.web.member;
2+
3+
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
6+
public record RetrieveAllMemberResponse(
7+
@Schema(description = "회원 이름", example = "양시훈")
8+
String name,
9+
10+
@Schema(description = "회원 이메일", example = "sihun123@gmail.com")
11+
String email,
12+
13+
@Schema(description = "회원 닉네임, 로그인할 때 쓰입니다.", example = "leo.sh")
14+
String nickname,
15+
16+
@Schema(description = "승인 권한 여부", example = "true")
17+
Boolean isReviewer,
18+
19+
@Schema(description = "부서 ID", example = "1")
20+
Long departmentId,
21+
22+
@Schema(description = "회원 역할", example = "ROLE_USER")
23+
MemberRole role,
24+
25+
@Schema(description = "회원 직책", example = "개발자")
26+
String departmentRole
27+
) {}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,12 @@ public List<Task> findTasksByMemberIdAndStatus(Long memberId, List<TaskStatus> t
8686
.collect(Collectors.toList());
8787
}
8888

89+
@Override
90+
public List<Member> findAllMembers() {
91+
List<MemberEntity> entities = memberRepository.findAll();
92+
return entities.stream()
93+
.map(memberPersistenceMapper::toDomain)
94+
.toList();
95+
}
8996
}
9097

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@ public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
2121
Optional<MemberEntity> findByNickname(String nickname);
2222

2323
List<MemberEntity> findByIsReviewerTrue();
24+
25+
List<MemberEntity> findAll(); // 전체 회원 조회
26+
2427
}
2528

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package clap.server.application.mapper;
2+
3+
import clap.server.adapter.inbound.web.member.RetrieveAllMemberResponse;
4+
import clap.server.domain.model.member.Member;
5+
import org.springframework.stereotype.Component;
6+
7+
import java.util.List;
8+
9+
@Component
10+
public class RetrieveAllMemberMapper {
11+
public List<RetrieveAllMemberResponse> toResponseList(List<Member> members) {
12+
return members.stream()
13+
.map(this::toResponse)
14+
.toList();
15+
}
16+
17+
public RetrieveAllMemberResponse toResponse(Member member) {
18+
return new RetrieveAllMemberResponse(
19+
member.getMemberInfo().getName(),
20+
member.getMemberInfo().getEmail(),
21+
member.getMemberInfo().getNickname(),
22+
member.getMemberInfo().isReviewer(),
23+
member.getMemberInfo().getDepartment().getDepartmentId(),
24+
member.getMemberInfo().getRole(),
25+
member.getMemberInfo().getDepartmentRole()
26+
);
27+
}
28+
}

src/main/java/clap/server/application/port/inbound/domain/MemberService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.application.port.inbound.domain;
22

3+
import clap.server.application.port.inbound.management.FindAllMemberUsecase;
34
import clap.server.application.port.outbound.member.LoadMemberPort;
45
import clap.server.domain.model.member.Member;
56
import clap.server.domain.model.task.Task;
@@ -13,7 +14,7 @@
1314

1415
@Service
1516
@RequiredArgsConstructor
16-
public class MemberService {
17+
public class MemberService implements FindAllMemberUsecase {
1718
private final LoadMemberPort loadMemberPort;
1819

1920
public Member findById(Long memberId) {
@@ -56,4 +57,9 @@ public List<Member> findActiveManagers() {
5657
public List<Member> findReviewers() {
5758
return loadMemberPort.findReviewers();
5859
}
60+
61+
@Override
62+
public List<Member> findAllMembers() {
63+
return loadMemberPort.findAllMembers();
64+
}
5965
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package clap.server.application.port.inbound.management;
2+
3+
import clap.server.domain.model.member.Member;
4+
5+
import java.util.List;
6+
7+
public interface FindAllMemberUsecase {
8+
List<Member> findAllMembers();
9+
}

src/main/java/clap/server/application/port/outbound/member/LoadMemberPort.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,7 @@ public interface LoadMemberPort {
2121

2222
List<Member> findReviewers();
2323

24+
List<Member> findAllMembers(); // 전체 회원 조회
25+
26+
2427
}

0 commit comments

Comments
 (0)