From 2b0c55c169b0a8267b193b166a0fb9f421a6bd11 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 23 Jan 2025 13:47:16 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor=20:=20=ED=8E=B8=EC=A7=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=98=EA=B8=B0=20API=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EC=B2=9C=EC=9D=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=8B=9C=20=EC=B6=94=EC=B2=9C=EC=9D=B8=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EC=B6=94=EA=B0=80=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../letter/dto/CreateLetterRequest.java | 5 ++- .../letter/service/LetterService.java | 4 ++- .../domain/letter/service/CreateLetter.java | 19 ++++++++++- .../domain/domain/news/service/GetNews.java | 2 +- .../tohero/domain/query/UserRepository.java | 2 ++ .../entity/RecommendEntity.java | 34 +++++++++++++++++++ .../infrastructure/entity/UserEntity.java | 12 ++++++- .../infrastructure/mapper/UserMapper.java | 1 + .../query/impl/UserRepositoryImpl.java | 16 +++++++++ .../repository/LetterEntityRepository.java | 1 - .../repository/NewsEntityRepository.java | 2 +- .../repository/RecommendEntityRepository.java | 15 ++++++++ 12 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java create mode 100644 src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java diff --git a/src/main/java/com/neighbors/tohero/application/letter/dto/CreateLetterRequest.java b/src/main/java/com/neighbors/tohero/application/letter/dto/CreateLetterRequest.java index ae6eac5..7923ed3 100644 --- a/src/main/java/com/neighbors/tohero/application/letter/dto/CreateLetterRequest.java +++ b/src/main/java/com/neighbors/tohero/application/letter/dto/CreateLetterRequest.java @@ -25,6 +25,9 @@ public record CreateLetterRequest ( Boolean readingAlarm, @NotNull - boolean isPublic + boolean isPublic, + + @JsonInclude(JsonInclude.Include.NON_NULL) + String recommenderCode ){ } diff --git a/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java b/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java index 5360930..c00ecb6 100644 --- a/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java +++ b/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java @@ -7,6 +7,7 @@ import com.neighbors.tohero.common.enums.Role; import com.neighbors.tohero.common.exception.address.AddressException; import com.neighbors.tohero.common.exception.letter.LetterException; +import com.neighbors.tohero.common.jwt.JwtProvider; import com.neighbors.tohero.common.jwt.JwtUserDetails; import com.neighbors.tohero.domain.domain.address.service.GetAddress; import com.neighbors.tohero.domain.domain.letter.service.CreateLetter; @@ -102,7 +103,8 @@ private BaseResponse createGuestLetter(final String nickna createLetterRequest.targetJob(), createLetterRequest.addressId(), createLetterRequest.heroName(), - createLetterRequest.isPublic() + createLetterRequest.isPublic(), + createLetterRequest.recommenderCode() ); throwIfLetterNotCreate(createdLetterId); diff --git a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java index 10bb050..49d6315 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/letter/service/CreateLetter.java @@ -4,6 +4,7 @@ import com.neighbors.tohero.common.annotaion.DomainService; import com.neighbors.tohero.common.enums.TargetJob; import com.neighbors.tohero.common.exception.address.AddressException; +import com.neighbors.tohero.common.jwt.JwtProvider; import com.neighbors.tohero.domain.domain.address.model.Address; import com.neighbors.tohero.domain.domain.mainPage.model.Letter; import com.neighbors.tohero.domain.domain.user.model.User; @@ -12,6 +13,8 @@ import com.neighbors.tohero.domain.query.UserRepository; import lombok.RequiredArgsConstructor; +import java.util.List; + @DomainService @RequiredArgsConstructor public class CreateLetter { @@ -19,6 +22,7 @@ public class CreateLetter { private final LetterRepository letterRepository; private final UserRepository userRepository; private final AddressRepository addressRepository; + private final JwtProvider jwtProvider; public long createLetter(long userId, String writer, CreateLetterRequest createLetterRequest){ User user = userRepository.getUser(repo -> repo.findByUserId(userId)); @@ -49,10 +53,12 @@ public long createLetter(long userId, String writer, CreateLetterRequest createL } Letter createdLetter = letterRepository.createLetter(newLetter); + reflectRecommendation(writer, createLetterRequest.recommenderCode()); + return createdLetter.getLetterId(); } - public long createGuestLetter(String writer, String content, TargetJob targetJob, Long addressId, String heroName, boolean isPublic){ + public long createGuestLetter(String writer, String content, TargetJob targetJob, Long addressId, String heroName, boolean isPublic, String recommenderCode){ Letter newLetter; if(addressId == null){ newLetter = Letter.builder() @@ -81,6 +87,17 @@ public long createGuestLetter(String writer, String content, TargetJob targetJob } Letter createdLetter = letterRepository.createLetter(newLetter); + //todo 비회원 편지 작성 공유하기 반영 막으려면 이거 주석처리 + reflectRecommendation(writer, recommenderCode); + return createdLetter.getLetterId(); } + + private void reflectRecommendation(String writer, String recommenderCode){ + if(recommenderCode != null){ + String recommenderEmailsDividedBySlash = jwtProvider.getRecommenderEmails(recommenderCode); + List recommenderEmails = List.of(recommenderEmailsDividedBySlash.split("/")); + userRepository.reflectRecommendation(writer, recommenderEmails); + } + } } diff --git a/src/main/java/com/neighbors/tohero/domain/domain/news/service/GetNews.java b/src/main/java/com/neighbors/tohero/domain/domain/news/service/GetNews.java index bd0ba71..919ca4a 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/news/service/GetNews.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/news/service/GetNews.java @@ -15,6 +15,6 @@ public class GetNews { private final NewsRepository newsRepository; public List getPagedNews(Pageable pageable){ - return newsRepository.getNewsList(repo -> repo.findAllByPagable(pageable)); + return newsRepository.getNewsList(repo -> repo.findAllByPageable(pageable)); } } diff --git a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java index 9e767e7..0eff006 100644 --- a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java +++ b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java @@ -4,6 +4,7 @@ import com.neighbors.tohero.infrastructure.entity.UserEntity; import com.neighbors.tohero.infrastructure.repository.UserEntityRepository; +import java.util.List; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -13,4 +14,5 @@ public interface UserRepository { User updateUserName(Function> findUserFunction, String nickname); User getUser(Function> findUserFunction); void deleteUser(Consumer findUserConsumer); + void reflectRecommendation(String writer, List recommenderEmails); } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java new file mode 100644 index 0000000..ba1717f --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java @@ -0,0 +1,34 @@ +package com.neighbors.tohero.infrastructure.entity; + +import jakarta.persistence.*; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "`Recommend`") +@NoArgsConstructor +public class RecommendEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "recommend_id") + private long recommendId; + + @Column(name = "recommendedPeopleName") + private String recommendedPeopleName; + + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @JoinColumn(name = "user_id", nullable = false) + private UserEntity userEntity; + + public RecommendEntity(UserEntity user){ + this.userEntity = user; + } + + public void addRecommendedPeopleName(String recommendedPeopleName){ + //todo 만약 나중에 문제가 될 시, 닉네임 중복은 허용안되게 설정할 것 + if(this.recommendedPeopleName != null){ + this.recommendedPeopleName += "," +recommendedPeopleName; + return; + } + this.recommendedPeopleName = recommendedPeopleName; + } +} diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java index bba8124..8a78db9 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/UserEntity.java @@ -6,6 +6,7 @@ import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.Setter; @Entity @Table(name = "`User`") @@ -26,9 +27,14 @@ public class UserEntity extends BaseEntity { @Column(name = "role", nullable = false) private Role role; + @Setter @Column(name = "recommenders", nullable = true) private String recommenders; + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @JoinColumn(name = "recommend_id", nullable = false) + private RecommendEntity recommendEntity; + public UserEntity() { } @@ -47,11 +53,15 @@ public static UserEntity returnNewObjectOf(String nickName, String email, Role r } public static UserEntity from(User user) { - return new UserEntity(user.getUserId(), user.getUserName(), user.getEmail(), user.getRole(),user.getRecommenders()); + return new UserEntity(user.getUserId(), user.getUserName(), user.getEmail(), user.getRole(),user.getRecommenders(), null); } public String getRecommenders() { if(recommenders == null) return ""; return recommenders; } + + public void setRecommenders(RecommendEntity recommendEntity) { + this.recommendEntity = recommendEntity; + } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java index f877454..b8291ff 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/mapper/UserMapper.java @@ -1,6 +1,7 @@ package com.neighbors.tohero.infrastructure.mapper; import com.neighbors.tohero.domain.domain.user.model.User; +import com.neighbors.tohero.infrastructure.entity.RecommendEntity; import com.neighbors.tohero.infrastructure.entity.UserEntity; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java index 4256d4f..90a7429 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -5,12 +5,15 @@ import com.neighbors.tohero.common.exception.user.UserException; import com.neighbors.tohero.domain.domain.user.model.User; import com.neighbors.tohero.domain.query.UserRepository; +import com.neighbors.tohero.infrastructure.entity.RecommendEntity; import com.neighbors.tohero.infrastructure.entity.UserEntity; import com.neighbors.tohero.infrastructure.mapper.UserMapper; +import com.neighbors.tohero.infrastructure.repository.RecommendEntityRepository; import com.neighbors.tohero.infrastructure.repository.UserEntityRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -20,6 +23,7 @@ public class UserRepositoryImpl implements UserRepository { private final UserEntityRepository userEntityRepository; + private final RecommendEntityRepository recommendEntityRepository; private final UserMapper userMapper; @Override @@ -28,6 +32,8 @@ public User createUser(User user) { return getUser(repo -> repo.findByEmail(user.getEmail())); }catch(UserException e){ UserEntity userEntity = userMapper.toNewEntity(user); + RecommendEntity recommendEntity = new RecommendEntity(userEntity); + userEntity.setRecommenders(recommendEntity); userEntityRepository.save(userEntity); UserEntity createdUserEntity = userEntityRepository.findByEmail(user.getEmail()) @@ -67,4 +73,14 @@ public User getUser(Function> findUse public void deleteUser(Consumer findUserConsumer) { findUserConsumer.accept(userEntityRepository); } + + @Override + public void reflectRecommendation(String writer, List recommenderEmails) { + List recommendEntities = recommendEntityRepository.findAllByUserEmailIn(recommenderEmails); + + recommendEntities + .forEach(recommendEntity -> recommendEntity.addRecommendedPeopleName(writer)); + + recommendEntityRepository.saveAll(recommendEntities); + } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java index d8b66d4..67142a9 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java @@ -3,7 +3,6 @@ import com.neighbors.tohero.infrastructure.entity.LetterEntity; import io.lettuce.core.dynamic.annotation.Param; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/NewsEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/NewsEntityRepository.java index 090f3df..70a2d33 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/repository/NewsEntityRepository.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/NewsEntityRepository.java @@ -10,5 +10,5 @@ public interface NewsEntityRepository extends JpaRepository { @Query("SELECT ne FROM NewsEntity ne") - Optional> findAllByPagable(Pageable pageable); + Optional> findAllByPageable(Pageable pageable); } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java new file mode 100644 index 0000000..dbbf323 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/RecommendEntityRepository.java @@ -0,0 +1,15 @@ +package com.neighbors.tohero.infrastructure.repository; + +import com.neighbors.tohero.infrastructure.entity.RecommendEntity; +import io.lettuce.core.dynamic.annotation.Param; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface RecommendEntityRepository extends JpaRepository { + @Query("SELECT re FROM RecommendEntity re WHERE re.userEntity.email IN :emails") + List findAllByUserEmailIn(@Param("emails") List emails); +} From 8901eda1829bcb59cf3b252ba73fbb9ca7b5635f Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 23 Jan 2025 13:58:44 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat(presentaion)=20:=20=EA=B3=B5=EC=9C=A0?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sharing/dto/GetSharingPageInfoResponse.java | 4 ++++ .../application/sharing/service/SharingService.java | 5 +++++ .../tohero/presentation/controller/SharingController.java | 8 ++++++++ 3 files changed, 17 insertions(+) create mode 100644 src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java diff --git a/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java new file mode 100644 index 0000000..91547b8 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java @@ -0,0 +1,4 @@ +package com.neighbors.tohero.application.sharing.dto; + +public record GetSharingPageInfoResponse() { +} diff --git a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java index 57818cc..97ac199 100644 --- a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java +++ b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java @@ -4,6 +4,7 @@ import com.neighbors.tohero.application.baseResponse.BaseResponseMessage; import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; import com.neighbors.tohero.application.sharing.dto.GetRecommenderCodeResponse; +import com.neighbors.tohero.application.sharing.dto.GetSharingPageInfoResponse; import com.neighbors.tohero.common.jwt.JwtProvider; import com.neighbors.tohero.domain.domain.user.model.User; import com.neighbors.tohero.domain.domain.user.service.GetUser; @@ -31,6 +32,10 @@ public BaseResponse getRecommenderCode(String userEm ); } + public BaseResponse getSharingPageInfo(long userId){ + return null; + } + private String createRecommenderCode(User user){ String recommenderEmailsDividedBySlash = user.getRecommenders(); List recommenderEmails = new java.util.ArrayList<>(List.of(recommenderEmailsDividedBySlash.split("/"))); diff --git a/src/main/java/com/neighbors/tohero/presentation/controller/SharingController.java b/src/main/java/com/neighbors/tohero/presentation/controller/SharingController.java index b675430..d00e298 100644 --- a/src/main/java/com/neighbors/tohero/presentation/controller/SharingController.java +++ b/src/main/java/com/neighbors/tohero/presentation/controller/SharingController.java @@ -28,4 +28,12 @@ public ResponseEntity getRecommenderCode( .body(sharingService.getRecommenderCode(jwtUserDetail.getEmail())); } + @Operation(summary = "공유하기 API", description = "공유하기 페이지 조회하는 API입니다.") + @GetMapping("") + public ResponseEntity getSharingPageInfo( + @Parameter(hidden=true) @AuthenticationPrincipal JwtUserDetails jwtUserDetail + ){ + return ResponseEntity.ok() + .body(sharingService.getSharingPageInfo(jwtUserDetail.getUserId())); + } } From d88f1a0427ae2fd49a7d012c3a91abe53d9c5cac Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 23 Jan 2025 14:25:24 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat(application)=20:=20=EA=B3=B5=EC=9C=A0?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/baseResponse/BaseResponseMessage.java | 3 ++- .../sharing/dto/GetSharingPageInfoResponse.java | 7 ++++++- .../application/sharing/service/SharingService.java | 8 +++++++- .../tohero/domain/domain/user/service/GetUser.java | 6 ++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java index d1a98a1..b5a535f 100644 --- a/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java +++ b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java @@ -56,7 +56,8 @@ public enum BaseResponseMessage { 뉴스_조회가_실패했습니다("뉴스 조회가 실패했습니다"), //sharing - 추천인_코드_생성이_정상실행_되었습니다("추천인 코드 생성이 정상실행 되었습니다"); + 추천인_코드_생성이_정상실행_되었습니다("추천인 코드 생성이 정상실행 되었습니다"), + 공유하기_페이지_조회가_성공했습니다("공유하기 페이지 조회가 성공했습니다"); private final String message; diff --git a/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java index 91547b8..29af7c9 100644 --- a/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java +++ b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java @@ -1,4 +1,9 @@ package com.neighbors.tohero.application.sharing.dto; -public record GetSharingPageInfoResponse() { +import java.util.List; + +public record GetSharingPageInfoResponse( + int numberOfWriter, + List nameOfWriters +) { } diff --git a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java index 97ac199..72659fe 100644 --- a/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java +++ b/src/main/java/com/neighbors/tohero/application/sharing/service/SharingService.java @@ -33,7 +33,13 @@ public BaseResponse getRecommenderCode(String userEm } public BaseResponse getSharingPageInfo(long userId){ - return null; + List nameOfWriters = getUser.getNameOfWritersByUserId(userId); + + return new BaseResponse<>( + BaseResponseStatus.OK, + BaseResponseMessage.공유하기_페이지_조회가_성공했습니다.getMessage(), + new GetSharingPageInfoResponse(nameOfWriters.size(), nameOfWriters) + ); } private String createRecommenderCode(User user){ diff --git a/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java b/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java index 4994d3d..ab0c1ab 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java @@ -5,6 +5,8 @@ import com.neighbors.tohero.domain.query.UserRepository; import lombok.RequiredArgsConstructor; +import java.util.List; + @DomainService @RequiredArgsConstructor public class GetUser { @@ -17,4 +19,8 @@ public User getUserByEmail(String email) { public User getUserById(long userId) { return userRepository.getUser(repo -> repo.findByUserId(userId)); } + + public List getNameOfWritersByUserId(long userId){ + return null; + } } From 74037af81d8846af4a3937979aea3034d7a1d00e Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 23 Jan 2025 14:46:14 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat(domina,=20infrastructure)=20:=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=ED=95=98=EA=B8=B0=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20API=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/domain/user/service/GetUser.java | 2 +- .../tohero/domain/query/UserRepository.java | 1 + .../entity/RecommendEntity.java | 2 ++ .../query/impl/UserRepositoryImpl.java | 19 +++++++++++++++++-- .../repository/UserEntityRepository.java | 5 +++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java b/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java index ab0c1ab..8613255 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java @@ -21,6 +21,6 @@ public User getUserById(long userId) { } public List getNameOfWritersByUserId(long userId){ - return null; + return userRepository.getNameOfWriters(repo -> repo.findNameOfWritersByUserId(userId)); } } diff --git a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java index 0eff006..d2408b7 100644 --- a/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java +++ b/src/main/java/com/neighbors/tohero/domain/query/UserRepository.java @@ -15,4 +15,5 @@ public interface UserRepository { User getUser(Function> findUserFunction); void deleteUser(Consumer findUserConsumer); void reflectRecommendation(String writer, List recommenderEmails); + List getNameOfWriters(Function> findUserFunction); } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java index ba1717f..134a188 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java @@ -1,6 +1,7 @@ package com.neighbors.tohero.infrastructure.entity; import jakarta.persistence.*; +import lombok.Getter; import lombok.NoArgsConstructor; @Entity @@ -13,6 +14,7 @@ public class RecommendEntity { private long recommendId; @Column(name = "recommendedPeopleName") + @Getter private String recommendedPeopleName; @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java index 90a7429..d5824f7 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/UserRepositoryImpl.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.function.Consumer; @@ -60,13 +61,18 @@ public User updateUserName(Function> @Override public User getUser(Function> findUserFunction) { + UserEntity userEntity = getUserEntity(findUserFunction); + + return userMapper.toDomain(userEntity); + } + + private UserEntity getUserEntity(Function> findUserFunction) { UserEntity userEntity = findUserFunction.apply(userEntityRepository) .orElseThrow(() -> new UserException( BaseResponseStatus.NO_RESULT, BaseResponseMessage.존재하지_않는_유저입니다.getMessage() )); - - return userMapper.toDomain(userEntity); + return userEntity; } @Override @@ -83,4 +89,13 @@ public void reflectRecommendation(String writer, List recommenderEmails) recommendEntityRepository.saveAll(recommendEntities); } + + @Override + public List getNameOfWriters(Function> findUserFunction) { + UserEntity matchedUserEntity = getUserEntity(findUserFunction); + + return Arrays.stream(matchedUserEntity.getRecommendEntity().getRecommendedPeopleName() + .split(",")) + .toList(); + } } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java b/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java index 50c9688..3f6af72 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/UserEntityRepository.java @@ -2,8 +2,10 @@ import com.neighbors.tohero.infrastructure.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository @@ -11,4 +13,7 @@ public interface UserEntityRepository extends JpaRepository { boolean existsByEmail(String email); Optional findByEmail(String email); Optional findByUserId(long userId); + + @Query("SELECT ue FROM UserEntity ue JOIN FETCH ue.recommendEntity WHERE ue.userId=:userId") + Optional findNameOfWritersByUserId(long userId); } From 29ab60a811b2f83295eb095926837380b125f141 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Thu, 23 Jan 2025 15:02:09 +0900 Subject: [PATCH 5/5] =?UTF-8?q?validation=20:=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=97=90=20=EC=89=BC=ED=91=9C=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tohero/application/address/service/AddressService.java | 1 - .../tohero/application/baseResponse/BaseResponseMessage.java | 2 +- .../tohero/application/letter/service/LetterService.java | 2 -- .../tohero/application/login/service/OAuthService.java | 3 --- .../tohero/application/user/dto/AuthenticateUserRequest.java | 2 ++ .../neighbors/tohero/application/user/dto/UpdateUserName.java | 2 ++ .../tohero/infrastructure/query/impl/LetterRepositoryImpl.java | 1 - .../tohero/infrastructure/query/impl/NewsRepositoryImpl.java | 1 - .../tohero/infrastructure/query/impl/NoticeRepositoryImpl.java | 1 - 9 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/neighbors/tohero/application/address/service/AddressService.java b/src/main/java/com/neighbors/tohero/application/address/service/AddressService.java index 9f6db17..a25a2be 100644 --- a/src/main/java/com/neighbors/tohero/application/address/service/AddressService.java +++ b/src/main/java/com/neighbors/tohero/application/address/service/AddressService.java @@ -12,7 +12,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java index b5a535f..b556122 100644 --- a/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java +++ b/src/main/java/com/neighbors/tohero/application/baseResponse/BaseResponseMessage.java @@ -20,7 +20,7 @@ public enum BaseResponseMessage { 이미_존재하는_유저입니다("이미 존재하는 유저입니다"), 유저_이름_변경이_완료되었습니다("유저 이름 변경이 완료되었습니다"), 존재하지_않는_유저입니다("존재하지 않는 유저입니다"), - 유저_이름의_길이는_1부터_5까지만_가능합니다("유저 이름의 길이는 1부터 5까지만 가능합니다"), + 유저_이름의_길이는_1부터_5까지만_가능합니다("유저 이름의 길이는 1부터 5까지만 가능합니다. 쉼표가 포함되면 안됩니다."), ROLE_필드는_필수입력입니다("ROLE 필드는 필수입력입니다"), 이메일_형식이_올바르지_못합니다("이메일 형식이 올바르지 못합니다"), 유저가_성공적으로_인증되었습니다("유저가 성공적으로 인증되었습니다"), diff --git a/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java b/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java index c00ecb6..ca3b669 100644 --- a/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java +++ b/src/main/java/com/neighbors/tohero/application/letter/service/LetterService.java @@ -7,7 +7,6 @@ import com.neighbors.tohero.common.enums.Role; import com.neighbors.tohero.common.exception.address.AddressException; import com.neighbors.tohero.common.exception.letter.LetterException; -import com.neighbors.tohero.common.jwt.JwtProvider; import com.neighbors.tohero.common.jwt.JwtUserDetails; import com.neighbors.tohero.domain.domain.address.service.GetAddress; import com.neighbors.tohero.domain.domain.letter.service.CreateLetter; @@ -19,7 +18,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service diff --git a/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java index 9cf726c..aacdda0 100644 --- a/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java +++ b/src/main/java/com/neighbors/tohero/application/login/service/OAuthService.java @@ -10,7 +10,6 @@ import com.neighbors.tohero.common.jwt.JwtProvider; import com.neighbors.tohero.common.jwt.JwtUserDetails; import com.neighbors.tohero.domain.domain.user.model.User; -import com.neighbors.tohero.domain.domain.user.service.CreateUser; import com.neighbors.tohero.domain.domain.login.service.oauth.kakao.RequestKakaoInfo; import com.neighbors.tohero.domain.domain.user.service.GetUser; import lombok.RequiredArgsConstructor; @@ -18,8 +17,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.Optional; - @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/com/neighbors/tohero/application/user/dto/AuthenticateUserRequest.java b/src/main/java/com/neighbors/tohero/application/user/dto/AuthenticateUserRequest.java index 0745aa9..6b86de1 100644 --- a/src/main/java/com/neighbors/tohero/application/user/dto/AuthenticateUserRequest.java +++ b/src/main/java/com/neighbors/tohero/application/user/dto/AuthenticateUserRequest.java @@ -5,6 +5,7 @@ import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; public record AuthenticateUserRequest ( @@ -13,6 +14,7 @@ public record AuthenticateUserRequest ( @NotBlank @Length(min = 1, max = 5) + @Pattern(regexp = "^[^,]*$") String nickname, @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/src/main/java/com/neighbors/tohero/application/user/dto/UpdateUserName.java b/src/main/java/com/neighbors/tohero/application/user/dto/UpdateUserName.java index 376dbaf..e6f125f 100644 --- a/src/main/java/com/neighbors/tohero/application/user/dto/UpdateUserName.java +++ b/src/main/java/com/neighbors/tohero/application/user/dto/UpdateUserName.java @@ -1,9 +1,11 @@ package com.neighbors.tohero.application.user.dto; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; public record UpdateUserName( @Length(min = 1, max = 5) + @Pattern(regexp = "^[^,]*$") String nickname ) { } diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/LetterRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/LetterRepositoryImpl.java index 4bee6bb..0fa50b9 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/LetterRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/LetterRepositoryImpl.java @@ -9,7 +9,6 @@ import com.neighbors.tohero.infrastructure.mapper.LetterMapper; import com.neighbors.tohero.infrastructure.repository.LetterEntityRepository; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; import java.util.ArrayList; diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NewsRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NewsRepositoryImpl.java index 2ba03af..6afab0a 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NewsRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NewsRepositoryImpl.java @@ -11,7 +11,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Function; diff --git a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java index a5f3ee5..629aea7 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/query/impl/NoticeRepositoryImpl.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Repository; import java.util.List; -import java.util.Optional; @Repository @RequiredArgsConstructor