Skip to content

Commit 4cae1f5

Browse files
authored
Merge pull request #110 from TaskFlow-CLAP/CLAP-138
CLAP-138 회원 프로필 조회 API 구현
2 parents de43736 + dc57e59 commit 4cae1f5

File tree

10 files changed

+104
-9
lines changed

10 files changed

+104
-9
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package clap.server.adapter.inbound.web.dto.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 MemberProfileResponse(
7+
@Schema(description = "회원 ID")
8+
Long memberId,
9+
@Schema(description = "회원 이름")
10+
String memberName,
11+
@Schema(description = "회원 닉네임, 로그인에 쓰입니다")
12+
String nickname,
13+
@Schema(description = "회원 프로필 이미지")
14+
String imageUrl,
15+
@Schema(description = "회원 역할")
16+
MemberRole memberRole
17+
) {}

src/main/java/clap/server/adapter/inbound/web/member/ManagerController.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
package clap.server.adapter.inbound.web.member;
22

3-
import clap.server.application.port.inbound.domain.FindManagersUsecase;
43
import clap.server.adapter.inbound.web.dto.admin.FindManagersResponse;
4+
import clap.server.application.port.inbound.domain.FindManagersUsecase;
5+
import clap.server.common.annotation.architecture.WebAdapter;
6+
import io.swagger.v3.oas.annotations.tags.Tag;
57
import lombok.RequiredArgsConstructor;
68
import org.springframework.web.bind.annotation.GetMapping;
79
import org.springframework.web.bind.annotation.RequestMapping;
8-
import org.springframework.web.bind.annotation.RestController;
910

1011
import java.util.List;
1112

12-
@RestController
13-
@RequestMapping("/manager")
13+
14+
@Tag(name = "담당자 조회")
15+
@WebAdapter
1416
@RequiredArgsConstructor
17+
@RequestMapping("/api")
1518
public class ManagerController {
1619

1720
private final FindManagersUsecase findManagersUsecase;
1821

19-
@GetMapping
22+
@GetMapping("/managers")
2023
public List<FindManagersResponse> findManagers() {
2124

2225
List<FindManagersResponse> managers = findManagersUsecase.execute();
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package clap.server.adapter.inbound.web.member;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.adapter.inbound.web.dto.member.MemberProfileResponse;
5+
import clap.server.application.port.inbound.member.MemberInfoUsecase;
6+
import clap.server.common.annotation.architecture.WebAdapter;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.http.ResponseEntity;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.GetMapping;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
15+
@Tag(name = "회원 정보 조회/수정")
16+
@WebAdapter
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/members")
19+
public class MemberInfoController {
20+
private final MemberInfoUsecase memberInfoUsecase;
21+
22+
@Operation(summary = "회원 프로필을 조회합니다. 활성화된 회원만 조회 가능합니다.")
23+
@GetMapping("/profile")
24+
public ResponseEntity<MemberProfileResponse> getMemberProfile(@AuthenticationPrincipal SecurityUserDetails userInfo) {
25+
return ResponseEntity.ok(memberInfoUsecase.getMemberProfile(userInfo.getUserId()));
26+
}
27+
28+
}

src/main/java/clap/server/adapter/inbound/web/member/ResetPasswordController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package clap.server.adapter.inbound.web.member;
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
4-
import clap.server.application.port.inbound.auth.ResetPasswordUsecase;
4+
import clap.server.application.port.inbound.member.ResetPasswordUsecase;
55
import clap.server.common.annotation.architecture.WebAdapter;
66
import clap.server.common.annotation.validation.password.ValidPassword;
77
import io.swagger.v3.oas.annotations.Operation;

src/main/java/clap/server/application/mapper/MemberMapper.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.application.mapper;
22

3+
import clap.server.adapter.inbound.web.dto.member.MemberProfileResponse;
34
import clap.server.domain.model.member.Member;
45
import clap.server.domain.model.member.MemberInfo;
56

@@ -13,4 +14,14 @@ public static Member toMember(MemberInfo memberInfo) {
1314
.memberInfo(memberInfo)
1415
.build();
1516
}
17+
18+
public static MemberProfileResponse toMemberProfileResponse(Member member) {
19+
return new MemberProfileResponse(
20+
member.getMemberId(),
21+
member.getMemberInfo().getName(),
22+
member.getMemberInfo().getNickname(),
23+
member.getImageUrl(),
24+
member.getMemberInfo().getRole()
25+
);
26+
}
1627
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package clap.server.application.port.inbound.member;
2+
3+
import clap.server.adapter.inbound.web.dto.member.MemberProfileResponse;
4+
5+
public interface MemberInfoUsecase {
6+
MemberProfileResponse getMemberProfile(Long memberId);
7+
}

src/main/java/clap/server/application/port/inbound/auth/ResetPasswordUsecase.java renamed to src/main/java/clap/server/application/port/inbound/member/ResetPasswordUsecase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package clap.server.application.port.inbound.auth;
1+
package clap.server.application.port.inbound.member;
22

33
public interface ResetPasswordUsecase {
44
void resetPassword(Long memberId, String password);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package clap.server.application.service.member;
2+
3+
import clap.server.adapter.inbound.web.dto.member.MemberProfileResponse;
4+
import clap.server.application.port.inbound.domain.MemberService;
5+
import clap.server.application.port.inbound.member.MemberInfoUsecase;
6+
import clap.server.application.port.outbound.member.CommandMemberPort;
7+
import clap.server.application.port.outbound.member.LoadMemberPort;
8+
import clap.server.common.annotation.architecture.ApplicationService;
9+
import clap.server.domain.model.member.Member;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.transaction.annotation.Transactional;
12+
13+
import static clap.server.application.mapper.MemberMapper.toMemberProfileResponse;
14+
15+
@ApplicationService
16+
@RequiredArgsConstructor
17+
class MemberInfoService implements MemberInfoUsecase {
18+
private final MemberService memberService;
19+
private final LoadMemberPort loadMemberPort;
20+
private final CommandMemberPort commandMemberPort;
21+
22+
23+
@Override
24+
@Transactional(readOnly = true)
25+
public MemberProfileResponse getMemberProfile(Long memberId) {
26+
Member member = memberService.findActiveMember(memberId);
27+
return toMemberProfileResponse(member);
28+
}
29+
}

src/main/java/clap/server/application/service/member/ResetPasswordService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package clap.server.application.service.member;
22

3-
import clap.server.application.port.inbound.auth.ResetPasswordUsecase;
3+
import clap.server.application.port.inbound.member.ResetPasswordUsecase;
44
import clap.server.application.port.inbound.domain.MemberService;
55
import clap.server.application.port.outbound.member.CommandMemberPort;
66
import clap.server.common.annotation.architecture.ApplicationService;

src/test/java/clap/server/adapter/inbound/web/admin/MemberControllerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public void setupTestData() {
196196
@Test
197197
@WithMockUser(username = "admin", roles = "ADMIN")
198198
public void testFindManagers() throws Exception {
199-
mockMvc.perform(get("/manager"))
199+
mockMvc.perform(get("/api/managers"))
200200
.andExpect(status().isOk())
201201
.andExpect(jsonPath("$[0].nickname").value("Manager1"))
202202
.andExpect(jsonPath("$[0].imageUrl").value("http://example.com/manager1.jpg"))

0 commit comments

Comments
 (0)