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 d1a98a1..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 필드는 필수입력입니다"), 이메일_형식이_올바르지_못합니다("이메일 형식이 올바르지 못합니다"), 유저가_성공적으로_인증되었습니다("유저가 성공적으로 인증되었습니다"), @@ -56,7 +56,8 @@ public enum BaseResponseMessage { 뉴스_조회가_실패했습니다("뉴스 조회가 실패했습니다"), //sharing - 추천인_코드_생성이_정상실행_되었습니다("추천인 코드 생성이 정상실행 되었습니다"); + 추천인_코드_생성이_정상실행_되었습니다("추천인 코드 생성이 정상실행 되었습니다"), + 공유하기_페이지_조회가_성공했습니다("공유하기 페이지 조회가 성공했습니다"); private final String message; 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..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 @@ -18,7 +18,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service @@ -102,7 +101,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/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/sharing/dto/GetSharingPageInfoResponse.java b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java new file mode 100644 index 0000000..29af7c9 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/sharing/dto/GetSharingPageInfoResponse.java @@ -0,0 +1,9 @@ +package com.neighbors.tohero.application.sharing.dto; + +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 57818cc..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 @@ -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,16 @@ public BaseResponse getRecommenderCode(String userEm ); } + public BaseResponse getSharingPageInfo(long userId){ + List nameOfWriters = getUser.getNameOfWritersByUserId(userId); + + return new BaseResponse<>( + BaseResponseStatus.OK, + BaseResponseMessage.공유하기_페이지_조회가_성공했습니다.getMessage(), + new GetSharingPageInfoResponse(nameOfWriters.size(), nameOfWriters) + ); + } + 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/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/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/domain/user/service/GetUser.java b/src/main/java/com/neighbors/tohero/domain/domain/user/service/GetUser.java index 4994d3d..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 @@ -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 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 9e767e7..d2408b7 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,6 @@ public interface UserRepository { User updateUserName(Function> findUserFunction, String nickname); 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 new file mode 100644 index 0000000..134a188 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/infrastructure/entity/RecommendEntity.java @@ -0,0 +1,36 @@ +package com.neighbors.tohero.infrastructure.entity; + +import jakarta.persistence.*; +import lombok.Getter; +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") + @Getter + 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/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 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..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 @@ -5,12 +5,16 @@ 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.Arrays; +import java.util.List; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -20,6 +24,7 @@ public class UserRepositoryImpl implements UserRepository { private final UserEntityRepository userEntityRepository; + private final RecommendEntityRepository recommendEntityRepository; private final UserMapper userMapper; @Override @@ -28,6 +33,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()) @@ -54,17 +61,41 @@ 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 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); + } + + @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/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); +} 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); } 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())); + } }