From c0ac0e1a52e8ca5e35a6915f50304fc6ce8d427c Mon Sep 17 00:00:00 2001 From: yumzen Date: Mon, 5 Aug 2024 14:36:23 +0900 Subject: [PATCH 1/2] =?UTF-8?q?#79=20Feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/domain/entity/Member.java | 6 ++++ .../MemberService/MemberQueryService.java | 3 ++ .../MemberService/MemberQueryServiceImpl.java | 30 ++++++++++++++++++- .../web/controller/MemberController.java | 7 +++++ .../web/dto/Member/MemberResponseDTO.java | 20 +++++++++++-- 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/codiary/backend/global/domain/entity/Member.java b/src/main/java/com/codiary/backend/global/domain/entity/Member.java index 0bcdd5b..a15e543 100644 --- a/src/main/java/com/codiary/backend/global/domain/entity/Member.java +++ b/src/main/java/com/codiary/backend/global/domain/entity/Member.java @@ -57,6 +57,12 @@ public enum Gender {Male, Female} @Column(name = "linkedin", columnDefinition = "varchar(500)") private String linkedin; + @Column(name = "discord", columnDefinition = "varchar(500)") + private String discord; + + @Column(name="introduction", columnDefinition = "varchar(500)") + private String introduction; + @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true) private List techStackList = new ArrayList<>(); diff --git a/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryService.java b/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryService.java index dd5c2e4..9ae1ddf 100644 --- a/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryService.java +++ b/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryService.java @@ -2,6 +2,7 @@ import com.codiary.backend.global.domain.entity.Member; import com.codiary.backend.global.domain.entity.Post; import com.codiary.backend.global.domain.entity.Bookmark; +import com.codiary.backend.global.web.dto.Member.MemberResponseDTO; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,4 +13,6 @@ public interface MemberQueryService { // 회원별 북마크 리스트 조회 Page getBookmarkList(Long memberId, Integer page); + MemberResponseDTO.UserProfileDTO getUserProfile(Long userId, Member member); + } diff --git a/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryServiceImpl.java b/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryServiceImpl.java index 2ed6210..788a8a4 100644 --- a/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryServiceImpl.java +++ b/src/main/java/com/codiary/backend/global/service/MemberService/MemberQueryServiceImpl.java @@ -5,9 +5,13 @@ import com.codiary.backend.global.domain.entity.Bookmark; import com.codiary.backend.global.domain.entity.Member; import com.codiary.backend.global.domain.entity.Post; +import com.codiary.backend.global.domain.entity.Team; +import com.codiary.backend.global.domain.entity.mapping.TeamMember; +import com.codiary.backend.global.domain.entity.mapping.TechStacks; import com.codiary.backend.global.repository.BookmarkRepository; import com.codiary.backend.global.repository.MemberRepository; import com.codiary.backend.global.repository.PostRepository; +import com.codiary.backend.global.web.dto.Member.MemberResponseDTO; import lombok.RequiredArgsConstructor; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -17,7 +21,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -61,4 +65,28 @@ public Page getBookmarkList(Long memberId, Integer page) { } + @Override + public MemberResponseDTO.UserProfileDTO getUserProfile(Long userId, Member member) { + Member user = memberRepository.findById(userId) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); + + return MemberResponseDTO.UserProfileDTO.builder() + .currentMemberId(member.getMemberId()) + .userId(userId) + .photoUrl(user.getPhotoUrl()) + .githubUrl(user.getGithub()) + .linkedinUrl(user.getLinkedin()) + .discordUrl(user.getDiscord()) + .introduction(user.getIntroduction()) + .techStacksList(user.getTechStackList().stream() + .map(TechStacks::getName) + .collect(Collectors.toList())) + .teamList(user.getTeamMemberList().stream() + .map(TeamMember::getTeam) + .map(Team::getName) + .collect(Collectors.toList())) + .myPage(userId.equals(member.getMemberId())) + .build(); + } + } diff --git a/src/main/java/com/codiary/backend/global/web/controller/MemberController.java b/src/main/java/com/codiary/backend/global/web/controller/MemberController.java index 80f11e2..c73a185 100644 --- a/src/main/java/com/codiary/backend/global/web/controller/MemberController.java +++ b/src/main/java/com/codiary/backend/global/web/controller/MemberController.java @@ -176,4 +176,11 @@ public ApiResponse setProfileImage(@ModelAttri return memberCommandService.setProfileImage(member, request); } + + @GetMapping(path = "/profile/{userId}") + @Operation(summary = "사용자 정보 조회", description = "마이페이지 사용자 정보 조회 기능") + public ApiResponse getUserProfile(@PathVariable(value = "userId") Long userId){ + Member member = memberCommandService.getRequester(); + return ApiResponse.onSuccess(SuccessStatus.MEMBER_OK, memberQueryService.getUserProfile(userId, member)); + } } diff --git a/src/main/java/com/codiary/backend/global/web/dto/Member/MemberResponseDTO.java b/src/main/java/com/codiary/backend/global/web/dto/Member/MemberResponseDTO.java index e9962b1..04b23c1 100644 --- a/src/main/java/com/codiary/backend/global/web/dto/Member/MemberResponseDTO.java +++ b/src/main/java/com/codiary/backend/global/web/dto/Member/MemberResponseDTO.java @@ -1,9 +1,7 @@ package com.codiary.backend.global.web.dto.Member; import com.codiary.backend.global.jwt.TokenInfo; -import com.codiary.backend.global.web.dto.Bookmark.BookmarkResponseDTO; import lombok.*; -import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; import java.util.List; @@ -83,4 +81,22 @@ public static class MemberImageDTO { String url; } + @Builder + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class UserProfileDTO { + Long currentMemberId; + Long userId; + String photoUrl; + String githubUrl; + String linkedinUrl; + String discordUrl; + String introduction; + List techStacksList; + List teamList; + Boolean myPage; + } + } From ec660f1feafdb231824ef18797a565c8667f14e4 Mon Sep 17 00:00:00 2001 From: yumzen Date: Mon, 5 Aug 2024 15:12:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Chore:=20cors=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/config/WebCorsConfig.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/com/codiary/backend/global/config/WebCorsConfig.java diff --git a/src/main/java/com/codiary/backend/global/config/WebCorsConfig.java b/src/main/java/com/codiary/backend/global/config/WebCorsConfig.java new file mode 100644 index 0000000..357597c --- /dev/null +++ b/src/main/java/com/codiary/backend/global/config/WebCorsConfig.java @@ -0,0 +1,16 @@ +package com.codiary.backend.global.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebCorsConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry corsRegistry) { + + corsRegistry.addMapping("/**") + .allowedOrigins("http://localhost:3000"); + } +} \ No newline at end of file