From a6c5943c7e9e8339d077fbac687dd227c7d83274 Mon Sep 17 00:00:00 2001 From: soyesenna <85686722+soyesenna@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:13:21 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9A=94=EC=B2=AD=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=80=20=EB=AC=B8=EC=9E=90=EC=97=B4=EC=9D=B4=20?= =?UTF-8?q?=ED=8F=AC=ED=95=A8=EB=90=9C=20=ED=83=9C=EA=B7=B8=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=80=EC=A7=84=20=EB=A9=A4=EB=B2=84=20=EC=B0=BE=EB=8A=94=20?= =?UTF-8?q?API=20=EA=B5=AC=ED=98=84=20(#51)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberController.java | 6 ++++ .../controller/MemberControllerImpl.java | 11 ++++++ .../dto/requests/MemberFindGetRequest.java | 12 +++++++ .../dto/responses/MemberFindGetResponse.java | 34 +++++++++++++++++++ .../member/repository/MemberRepository.java | 3 ++ .../domain/member/service/MemberService.java | 9 +++++ 6 files changed, 75 insertions(+) create mode 100644 src/main/java/com/leets/team2/xclone/domain/member/dto/requests/MemberFindGetRequest.java create mode 100644 src/main/java/com/leets/team2/xclone/domain/member/dto/responses/MemberFindGetResponse.java diff --git a/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberController.java b/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberController.java index 694f3de..b8473a3 100644 --- a/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberController.java +++ b/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberController.java @@ -2,7 +2,9 @@ import com.leets.team2.xclone.common.ApiData; import com.leets.team2.xclone.domain.member.dto.requests.CheckTagDuplicationGetRequest; +import com.leets.team2.xclone.domain.member.dto.requests.MemberFindGetRequest; import com.leets.team2.xclone.domain.member.dto.responses.CheckTagDuplicationGetResponse; +import com.leets.team2.xclone.domain.member.dto.responses.MemberFindGetResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,4 +17,8 @@ public interface MemberController { @ApiResponse(responseCode = "200", description = "태그 중복확인 성공", content = @Content(schema = @Schema(implementation = CheckTagDuplicationGetResponse.class))) ResponseEntity> getCheckTagDuplication( CheckTagDuplicationGetRequest request); + + @Operation(summary = "멤버 정보 가져오기 API", description = "Tag로 멤버 정보를 가져옵니다.") + @ApiResponse(responseCode = "200", description = "멤버 정보 가져오기 성공", content = @Content(schema = @Schema(implementation = MemberFindGetResponse.class))) + ResponseEntity> getMember(MemberFindGetRequest request); } diff --git a/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberControllerImpl.java b/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberControllerImpl.java index bde7296..1fb873c 100644 --- a/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberControllerImpl.java +++ b/src/main/java/com/leets/team2/xclone/domain/member/controller/MemberControllerImpl.java @@ -2,7 +2,9 @@ import com.leets.team2.xclone.common.ApiData; import com.leets.team2.xclone.domain.member.dto.requests.CheckTagDuplicationGetRequest; +import com.leets.team2.xclone.domain.member.dto.requests.MemberFindGetRequest; import com.leets.team2.xclone.domain.member.dto.responses.CheckTagDuplicationGetResponse; +import com.leets.team2.xclone.domain.member.dto.responses.MemberFindGetResponse; import com.leets.team2.xclone.domain.member.service.MemberService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -27,4 +29,13 @@ public ResponseEntity> getCheckTagDuplic CheckTagDuplicationGetResponse.of(this.memberService.checkMemberExistsBy(request.tag())) ); } + + @Override + @GetMapping + public ResponseEntity> getMember( + @ModelAttribute MemberFindGetRequest request) { + return ApiData.ok( + this.memberService.findMembersByTag(request.tag()) + ); + } } diff --git a/src/main/java/com/leets/team2/xclone/domain/member/dto/requests/MemberFindGetRequest.java b/src/main/java/com/leets/team2/xclone/domain/member/dto/requests/MemberFindGetRequest.java new file mode 100644 index 0000000..2c8748a --- /dev/null +++ b/src/main/java/com/leets/team2/xclone/domain/member/dto/requests/MemberFindGetRequest.java @@ -0,0 +1,12 @@ +package com.leets.team2.xclone.domain.member.dto.requests; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +public record MemberFindGetRequest( + @NotNull(message = "tag는 필수입니다.") + @NotEmpty(message = "tag는 필수입니다.") + String tag +) { + +} diff --git a/src/main/java/com/leets/team2/xclone/domain/member/dto/responses/MemberFindGetResponse.java b/src/main/java/com/leets/team2/xclone/domain/member/dto/responses/MemberFindGetResponse.java new file mode 100644 index 0000000..2d56c54 --- /dev/null +++ b/src/main/java/com/leets/team2/xclone/domain/member/dto/responses/MemberFindGetResponse.java @@ -0,0 +1,34 @@ +package com.leets.team2.xclone.domain.member.dto.responses; + +import com.leets.team2.xclone.domain.member.entities.Member; +import java.util.ArrayList; +import java.util.List; + +public record MemberFindGetResponse( + List memberInfo +) { + + public static MemberFindGetResponse empty() { + return new MemberFindGetResponse(new ArrayList<>()); + } + + record MemberInfo( + String tag, + String birthDate, + String nickname, + String introduction + ) { + public static MemberInfo of(Member member) { + return new MemberInfo( + member.getTag(), + member.getBirthDate().toString(), + member.getNickname(), + member.getIntroduction() + ); + } + } + + public void add(Member member) { + this.memberInfo.add(MemberInfo.of(member)); + } +} diff --git a/src/main/java/com/leets/team2/xclone/domain/member/repository/MemberRepository.java b/src/main/java/com/leets/team2/xclone/domain/member/repository/MemberRepository.java index 548bf04..55d9d06 100644 --- a/src/main/java/com/leets/team2/xclone/domain/member/repository/MemberRepository.java +++ b/src/main/java/com/leets/team2/xclone/domain/member/repository/MemberRepository.java @@ -1,6 +1,7 @@ package com.leets.team2.xclone.domain.member.repository; import com.leets.team2.xclone.domain.member.entities.Member; +import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -15,4 +16,6 @@ public interface MemberRepository extends JpaRepository { boolean existsByKakaoId(Long kakaoId); Optional findByKakaoId(Long kakaoId); + + List findByTagContaining(String tag); } diff --git a/src/main/java/com/leets/team2/xclone/domain/member/service/MemberService.java b/src/main/java/com/leets/team2/xclone/domain/member/service/MemberService.java index 23be8f4..097cff5 100644 --- a/src/main/java/com/leets/team2/xclone/domain/member/service/MemberService.java +++ b/src/main/java/com/leets/team2/xclone/domain/member/service/MemberService.java @@ -1,8 +1,10 @@ package com.leets.team2.xclone.domain.member.service; +import com.leets.team2.xclone.domain.member.dto.responses.MemberFindGetResponse; import com.leets.team2.xclone.domain.member.entities.Member; import com.leets.team2.xclone.domain.member.repository.MemberRepository; import com.leets.team2.xclone.exception.NoSuchMemberException; +import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.apache.commons.logging.Log; @@ -47,4 +49,11 @@ public Member findMemberByTag(String tag){ return this.memberRepository.findByTag(tag).orElseThrow( NoSuchMemberException::new); } + + public MemberFindGetResponse findMembersByTag(String tag) { + MemberFindGetResponse memberFindGetResponse = MemberFindGetResponse.empty(); + + this.memberRepository.findByTagContaining(tag).forEach(memberFindGetResponse::add); + return memberFindGetResponse; + } }