Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

public record CreateLetterRequest (
@NotBlank
@Length(min =1, max = 1000)
@Length(min =1, max = 500)
String content,

@JsonInclude(JsonInclude.Include.NON_NULL)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.neighbors.tohero.domain.domain.mainPage.model.Letter;

import java.time.LocalDate;

public record GetLetterDetailResponse(
LetterInfo letterInfo
) {
Expand All @@ -11,10 +13,11 @@ public record LetterInfo(
String from,
String to,
boolean isOpened,
boolean isPublic
boolean isPublic,
LocalDate createdAt
){}

public static GetLetterDetailResponse from(Letter letter) {
return new GetLetterDetailResponse(new LetterInfo(letter.getLetterId(), letter.getLetterContent(), letter.getWriter(), letter.getTargetName(), letter.isOpened(), letter.isPublic()));
return new GetLetterDetailResponse(new LetterInfo(letter.getLetterId(), letter.getLetterContent(), letter.getWriter(), letter.getTargetName(), letter.isOpened(), letter.isPublic(), letter.getCreatedDate().toLocalDate()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class LetterService {
private final UpdateLetter updateLetter;
private final DeleteLetter deleteLetter;

@Transactional
public BaseResponse<CreateLetterResponse> createLetter(final JwtUserDetails jwtUserDetail, final CreateLetterRequest createLetterRequest) {

throwExceptionIfAddressIsNotExist(createLetterRequest.addressId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ public BaseResponse<GetSharingPageInfoResponse> getSharingPageInfo(long userId){
private String createRecommenderCode(User user){
String recommenderEmailsDividedBySlash = user.getRecommenders();
List<String> recommenderEmails = new java.util.ArrayList<>(List.of(recommenderEmailsDividedBySlash.split("/")));
recommenderEmails.add(user.getEmail());
boolean isNotExistEmail = recommenderEmails.stream().noneMatch(email -> email.equals(user.getEmail()));
if(isNotExistEmail) {
recommenderEmails.add(user.getEmail());
}

if (recommenderEmails.size() > 5) {
recommenderEmails.remove(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public long createLetter(long userId, String writer, CreateLetterRequest createL
recommenderEmailDividedBySlash = jwtProvider.getRecommenderEmails(createLetterRequest.recommenderCode());
}
User user = userRepository.getUserAndUpdateRecommenders(repo -> repo.findByUserId(userId), recommenderEmailDividedBySlash);

Letter newLetter;
try{
Address address = addressRepository.getAddressById(createLetterRequest.addressId());
Expand Down Expand Up @@ -110,7 +111,7 @@ private void reflectRecommendation(User user, String writer, String recommenderC
if(recommenderCode != null){
String recommenderEmailsDividedBySlash = jwtProvider.getRecommenderEmails(recommenderCode);
List<String> recommenderEmails = List.of(recommenderEmailsDividedBySlash.split("/"));
userRepository.reflectRecommendation(writer, recommenderEmails);
userRepository.reflectRecommendation(writer, recommenderEmails, user.getUserId());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public interface UserRepository {
User getUser(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction);
void deleteUser(Consumer<UserEntityRepository> findUserConsumer);
void reflectRecommendation(String writer, List<String> recommenderEmails);
void reflectRecommendation(String writer, List<String> recommenderEmails, long userId);
User getUserForSharing(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction);
User getUserAndUpdateRecommenders(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction, String recommenderCode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@
@Entity
@Table(name = "`Recommend`")
@NoArgsConstructor
@Getter
public class RecommendEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "recommend_id")
private long recommendId;

@Column(name = "recommendedPeopleName")
@Getter
private String recommendedPeopleName;

@Column(name = "recommendedPeopleId")
private String recommendedPeopleId = null;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", nullable = true)
private UserEntity userEntity;
Expand All @@ -34,10 +37,25 @@ public void addRecommendedPeopleName(String recommendedPeopleName){
this.recommendedPeopleName = recommendedPeopleName;
}

public void addRecommendedPeopleId(long recommendedPeopleId){
if(this.recommendedPeopleId != null){
this.recommendedPeopleId += "," +recommendedPeopleId;
return;
}
this.recommendedPeopleId = String.valueOf(recommendedPeopleId);
}

public String getRecommendedPeopleName(){
if(recommendedPeopleName == null){
return "";
}
return recommendedPeopleName;
}

public String getRecommendedPeopleId(){
if(recommendedPeopleId == null){
return "";
}
return recommendedPeopleId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class LetterRepositoryImpl implements LetterRepository {

@Override
public long getTotalLetterNumber() {
return letterEntityRepository.countPublicLetter();
return letterEntityRepository.countAllLetter();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +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.*;
import java.util.function.Consumer;
import java.util.function.Function;

Expand Down Expand Up @@ -90,6 +88,24 @@ public void reflectRecommendation(String writer, List<String> recommenderEmails)
recommendEntityRepository.saveAll(recommendEntities);
}

@Override
public void reflectRecommendation(String writer, List<String> recommenderEmails, long userId) {
List<RecommendEntity> recommendEntities = recommendEntityRepository.findAllByUserEmailIn(recommenderEmails);

String userIdStr = String.valueOf(userId);
recommendEntities.stream()
.filter(entity ->
Arrays.stream(entity.getRecommendedPeopleId().split(","))
.noneMatch(id -> id.equals(userIdStr))
)
.forEach(entity -> {
entity.addRecommendedPeopleId(userId);
entity.addRecommendedPeopleName(writer);
});

recommendEntityRepository.saveAll(recommendEntities);
}

@Override
public User getUserForSharing(Function<UserEntityRepository, Optional<UserEntity>> findUserFunction) {
UserEntity matchedUserEntity = getUserEntity(findUserFunction);
Expand Down Expand Up @@ -125,23 +141,32 @@ private void updateUserRecommenders(UserEntity userEntity, String recommenderEma
//이전 사람 이름 저장
String lastUserEmail = recommenderEmailsDividedBySlash.split("/")[recommenderEmailsDividedBySlash.split("/").length - 1];
UserEntity lastUserEntity = getUserEntity(repo -> repo.findByEmail(lastUserEmail));
userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName());

boolean isNotExistId = false;
isNotExistId = Arrays.stream(userEntity.getRecommendEntity().getRecommendedPeopleId().split(","))
.noneMatch(id -> id.equals(String.valueOf(lastUserEntity.getUserId())));

if(isNotExistId){
userEntity.getRecommendEntity().addRecommendedPeopleName(lastUserEntity.getNickName());
userEntity.getRecommendEntity().addRecommendedPeopleId(lastUserEntity.getUserId());
}
userEntityRepository.save(userEntity);
}

private void queueingUserRecommenders(UserEntity userEntity, String recommenderEmailsDividedBySlash) {
List<String> existedRecommendersEmail = new java.util.ArrayList<>(Arrays.stream(userEntity.getRecommenders().split("/")).toList());
List<String> addedRecommendersEmail = Arrays.stream(recommenderEmailsDividedBySlash.split("/")).toList();
List<String> existedRecommendersEmail = new ArrayList<>(Arrays.asList(userEntity.getRecommenders().split("/")));
List<String> addedRecommendersEmail = Arrays.asList(recommenderEmailsDividedBySlash.split("/"));

String result = userEntity.getRecommenders() + "/" + recommenderEmailsDividedBySlash;
if(existedRecommendersEmail.size() + addedRecommendersEmail.size() > 5){
existedRecommendersEmail.addAll(addedRecommendersEmail);
// 순서를 유지하며 중복 제거
LinkedHashSet<String> uniqueEmails = new LinkedHashSet<>(existedRecommendersEmail);
uniqueEmails.addAll(addedRecommendersEmail);

int size = existedRecommendersEmail.size();
List<String> lastFive = existedRecommendersEmail.subList(Math.max(0, size - 5), size);
// 마지막 5개만 유지
List<String> lastFive = new ArrayList<>(uniqueEmails);
int size = lastFive.size();
List<String> resultEmails = lastFive.subList(Math.max(0, size - 5), size);

result = String.join("/", lastFive);
}
userEntity.setRecommenders(result);
// 추천인 리스트 업데이트
userEntity.setRecommenders(String.join("/", resultEmails));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public interface LetterEntityRepository extends JpaRepository<LetterEntity, Long
@Query("SELECT le FROM LetterEntity le WHERE le.isPublic = true")
Optional<List<LetterEntity>> findPagedLetterEntity(Pageable pageable);

@Query("SELECT COUNT(le) FROM LetterEntity le WHERE le.isPublic = true")
long countPublicLetter();
@Query("SELECT COUNT(le) FROM LetterEntity le")
long countAllLetter();

@Query("SELECT le FROM LetterEntity le WHERE le.user.userId = :userId")
Optional<List<LetterEntity>> findAllByUserId(@Param("userId") Long userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class SharingController {

private final SharingService sharingService;

@Operation(summary = "공유하기 API", description = "공유하기 메시지보낼 때 사용할 추천인 코드를 생성해주는 API입니다.")
@Operation(summary = "공유하기 API", description = "공유하기 메시지 보낼 때 사용할 추천인 코드를 생성해주는 API입니다.")
@GetMapping("/recommenderCode")
public ResponseEntity<BaseResponse> getRecommenderCode(
@Parameter(hidden=true) @AuthenticationPrincipal JwtUserDetails jwtUserDetail
Expand Down