From 9c288a7615a19a32523c3f7d0a45b60ad25a6f63 Mon Sep 17 00:00:00 2001 From: imscow11253 Date: Mon, 13 Jan 2025 05:12:10 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EB=82=B4=EA=B0=80=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=ED=95=9C=20=ED=8E=B8=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../letter/dto/GetMyLettersResponse.java | 38 +++++++++++++++++++ .../letter/service/LetterService.java | 15 ++++++-- .../domain/domain/mainPage/model/Letter.java | 16 ++++++-- .../domain/mainPage/service/GetLetter.java | 6 ++- .../tohero/domain/query/LetterRepository.java | 2 +- .../query/impl/LetterRepositoryImpl.java | 10 ++++- .../repository/LetterEntityRepository.java | 4 +- .../controller/LetterController.java | 6 +++ 8 files changed, 83 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/neighbors/tohero/application/letter/dto/GetMyLettersResponse.java diff --git a/src/main/java/com/neighbors/tohero/application/letter/dto/GetMyLettersResponse.java b/src/main/java/com/neighbors/tohero/application/letter/dto/GetMyLettersResponse.java new file mode 100644 index 0000000..f9beb09 --- /dev/null +++ b/src/main/java/com/neighbors/tohero/application/letter/dto/GetMyLettersResponse.java @@ -0,0 +1,38 @@ +package com.neighbors.tohero.application.letter.dto; + +import com.neighbors.tohero.domain.domain.mainPage.model.Letter; + +import java.text.Format; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +public record GetMyLettersResponse ( + List myLetterInfos +){ + public record MyLetterInfo( + long letterId, + String to, + String from, + String createdAt, + boolean isOpened, + String content + ){ + public static MyLetterInfo from(Letter letter){ + return new MyLetterInfo( + letter.getLetterId(), + letter.getTargetName(), + letter.getWriter(), + letter.getCreatedDate().format(DateTimeFormatter.ofPattern("YY.MM.dd")), + letter.isOpened(), + letter.getLetterContent()); + } + } + + public static GetMyLettersResponse from(List myLetters){ + List myLetterInfos = myLetters.stream() + .map(MyLetterInfo::from) + .toList(); + return new GetMyLettersResponse(myLetterInfos); + } +} 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 3901e66..13d13c2 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 @@ -3,10 +3,7 @@ import com.neighbors.tohero.application.baseResponse.BaseResponse; import com.neighbors.tohero.application.baseResponse.BaseResponseMessage; import com.neighbors.tohero.application.baseResponse.BaseResponseStatus; -import com.neighbors.tohero.application.letter.dto.CreateLetterRequest; -import com.neighbors.tohero.application.letter.dto.CreateLetterResponse; -import com.neighbors.tohero.application.letter.dto.GetLetterDetailRequest; -import com.neighbors.tohero.application.letter.dto.GetLetterDetailResponse; +import com.neighbors.tohero.application.letter.dto.*; import com.neighbors.tohero.common.enums.Role; import com.neighbors.tohero.common.exception.address.AddressException; import com.neighbors.tohero.common.exception.letter.LetterException; @@ -61,6 +58,16 @@ public BaseResponse getLetterDetail(GetLetterDetailRequ ); } + public BaseResponse getMyLetters(long userId){ + List myLetters = getLetter.getMyLetters(userId); + + return new BaseResponse<>( + BaseResponseStatus.OK, + BaseResponseMessage.편지가_성공적으로_조회되었습니다.getMessage(), + GetMyLettersResponse.from(myLetters) + ); + } + private BaseResponse createGuestLetter(final String nickname, final CreateLetterRequest createLetterRequest) { long createdLetterId = createLetter.createGuestLetter( nickname, diff --git a/src/main/java/com/neighbors/tohero/domain/domain/mainPage/model/Letter.java b/src/main/java/com/neighbors/tohero/domain/domain/mainPage/model/Letter.java index 93737db..bec5498 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/mainPage/model/Letter.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/mainPage/model/Letter.java @@ -7,6 +7,8 @@ import lombok.Builder; import lombok.Getter; +import java.time.LocalDateTime; + @Getter @Builder @AllArgsConstructor @@ -23,6 +25,8 @@ public class Letter { private String writer; private User user; + private LocalDateTime createdDate; + public String getTargetName(){ if(targetName == null) { return "익명의"; @@ -38,7 +42,8 @@ public static Letter createNonUserAndAddress(LetterEntity letterEntity) { letterEntity.getTargetName(), letterEntity.getIsPublic(), letterEntity.getReadingAlarm(), - null,letterEntity.getWriter(),null + null,letterEntity.getWriter(),null, + letterEntity.created_at ); } @@ -52,7 +57,8 @@ public static Letter createNonUser(LetterEntity letterEntity, Address address) { letterEntity.getReadingAlarm(), address ,letterEntity.getWriter(), - null + null, + letterEntity.created_at ); } @@ -66,7 +72,8 @@ public static Letter createNonAddress(LetterEntity letterEntity, User user) { letterEntity.getReadingAlarm(), null, letterEntity.getUser().getNickName(), - user + user, + letterEntity.created_at ); } @@ -80,7 +87,8 @@ public static Letter from(LetterEntity letterEntity, Address address, User user) letterEntity.getReadingAlarm(), address, letterEntity.getUser().getNickName(), - user + user, + letterEntity.created_at ); } } diff --git a/src/main/java/com/neighbors/tohero/domain/domain/mainPage/service/GetLetter.java b/src/main/java/com/neighbors/tohero/domain/domain/mainPage/service/GetLetter.java index 4a31fa5..9f6b6a6 100644 --- a/src/main/java/com/neighbors/tohero/domain/domain/mainPage/service/GetLetter.java +++ b/src/main/java/com/neighbors/tohero/domain/domain/mainPage/service/GetLetter.java @@ -19,10 +19,14 @@ public long getTotalLetterNumber(){ } public List getPageableLetter(Pageable pageable){ - return letterRepository.getPageableLetter(pageable); + return letterRepository.getLetters(repo -> repo.findPagedLetterEntity(pageable)); } public Letter getLetterById(long letterId){ return letterRepository.getLetter(repo -> repo.findByIdAndPublic(letterId)); } + + public List getMyLetters(long userId){ + return letterRepository.getLetters(repo -> repo.findAllByUserId(userId)); + } } diff --git a/src/main/java/com/neighbors/tohero/domain/query/LetterRepository.java b/src/main/java/com/neighbors/tohero/domain/query/LetterRepository.java index b035974..af243b7 100644 --- a/src/main/java/com/neighbors/tohero/domain/query/LetterRepository.java +++ b/src/main/java/com/neighbors/tohero/domain/query/LetterRepository.java @@ -12,7 +12,7 @@ public interface LetterRepository { long getTotalLetterNumber(); - List getPageableLetter(Pageable pageable); + List getLetters(Function>> function); Letter createLetter(Letter letter); void remainLetterWithoutUser(long userId); Letter getLetter(Function> function); 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 a85ee0c..2b9bd94 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 @@ -12,6 +12,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Function; @@ -29,8 +30,12 @@ public long getTotalLetterNumber() { } @Override - public List getPageableLetter(Pageable pageable) { - List letterEntities = letterEntityRepository.findPagedLetterEntity(pageable).getContent(); + public List getLetters(Function>> function) { + List letterEntities = function.apply(letterEntityRepository) + .orElseThrow(()-> new LetterException( + BaseResponseStatus.NO_RESULT, + BaseResponseMessage.일치하는_편지가_없습니다.getMessage() + )); return letterEntities.stream() .map(letterMapper::toDomain) @@ -47,6 +52,7 @@ public Letter createLetter(Letter letter) { @Override public void remainLetterWithoutUser(long userId) { letterEntityRepository.findAllByUserId(userId) + .orElse(new ArrayList<>()) .forEach(letter -> { letter.remainLetterWithoutUser(); letterEntityRepository.save(letter); 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 d6caeaa..f13d20d 100644 --- a/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java +++ b/src/main/java/com/neighbors/tohero/infrastructure/repository/LetterEntityRepository.java @@ -15,13 +15,13 @@ public interface LetterEntityRepository extends JpaRepository { @Query("SELECT le FROM LetterEntity le WHERE le.isPublic = true") - Slice findPagedLetterEntity(Pageable pageable); + Optional> findPagedLetterEntity(Pageable pageable); @Query("SELECT COUNT(le) FROM LetterEntity le WHERE le.isPublic = true") long countPublicLetter(); @Query("SELECT le FROM LetterEntity le WHERE le.user.userId = :userId") - List findAllByUserId(@Param("userId") Long userId); + Optional> findAllByUserId(@Param("userId") Long userId); @Query("SELECT le FROM LetterEntity le WHERE le.letterId = :letterId AND le.isPublic = true") Optional findByIdAndPublic(@Param("letterId") long letterId); diff --git a/src/main/java/com/neighbors/tohero/presentation/controller/LetterController.java b/src/main/java/com/neighbors/tohero/presentation/controller/LetterController.java index e8c6f92..9bb192e 100644 --- a/src/main/java/com/neighbors/tohero/presentation/controller/LetterController.java +++ b/src/main/java/com/neighbors/tohero/presentation/controller/LetterController.java @@ -34,4 +34,10 @@ public ResponseEntity getLetterDetail(@ParameterObject GetLetterDe return ResponseEntity.ok() .body(letterService.getLetterDetail(getLetterDetailRequest)); } + + @GetMapping("") + public ResponseEntity getMyLetters(@Parameter(hidden = true) @AuthenticationPrincipal JwtUserDetails jwtUserDetail){ + return ResponseEntity.ok() + .body(letterService.getMyLetters(jwtUserDetail.getUserId())); + } }