|
1 | 1 | package com.boggle_boggle.bbegok.service; |
2 | 2 |
|
3 | | -import com.boggle_boggle.bbegok.dto.PagesDto; |
4 | 3 | import com.boggle_boggle.bbegok.dto.ReadDateAndIdDto; |
5 | | -import com.boggle_boggle.bbegok.dto.ReadDateDto; |
6 | 4 | import com.boggle_boggle.bbegok.dto.ReadDateIndexDto; |
7 | | -import com.boggle_boggle.bbegok.dto.request.NewNoteRequest; |
| 5 | +import com.boggle_boggle.bbegok.dto.RecordLibraryListDto; |
8 | 6 | import com.boggle_boggle.bbegok.dto.request.NewReadingRecordRequest; |
9 | 7 | import com.boggle_boggle.bbegok.dto.request.UpdateReadingRecordRequest; |
10 | 8 | import com.boggle_boggle.bbegok.dto.response.BookDetailResponse; |
| 9 | +import com.boggle_boggle.bbegok.dto.response.EditReadingRecordResponse; |
11 | 10 | import com.boggle_boggle.bbegok.dto.response.ReadingRecordResponse; |
12 | 11 | import com.boggle_boggle.bbegok.entity.*; |
13 | | -import com.boggle_boggle.bbegok.entity.embed.Pages; |
14 | 12 | import com.boggle_boggle.bbegok.entity.user.User; |
15 | 13 | import com.boggle_boggle.bbegok.enums.ReadStatus; |
16 | 14 | import com.boggle_boggle.bbegok.exception.Code; |
|
19 | 17 | import com.boggle_boggle.bbegok.repository.user.UserRepository; |
20 | 18 | import com.boggle_boggle.bbegok.utils.LocalDateTimeUtil; |
21 | 19 | import lombok.RequiredArgsConstructor; |
22 | | -import org.openapitools.jackson.nullable.JsonNullable; |
23 | 20 | import org.springframework.stereotype.Service; |
24 | 21 | import org.springframework.transaction.annotation.Transactional; |
25 | 22 |
|
26 | 23 | import java.util.*; |
27 | | -import java.util.stream.Collectors; |
28 | 24 | import java.util.stream.IntStream; |
29 | 25 |
|
30 | 26 | @Service |
@@ -70,6 +66,27 @@ private void validationNewReadingRecordRequest(NewReadingRecordRequest request) |
70 | 66 |
|
71 | 67 | } |
72 | 68 |
|
| 69 | + private void validationReadDateAndIdDto(ReadDateAndIdDto readDateAndIdDto) { |
| 70 | + switch (readDateAndIdDto.getStatus()) { |
| 71 | + case completed: |
| 72 | + if(readDateAndIdDto.getStartReadDate() == null || readDateAndIdDto.getEndReadDate() == null) throw new GeneralException(Code.BAD_REQUEST, "Required value is missing."); |
| 73 | + if(!LocalDateTimeUtil.isStartBeforeEnd(readDateAndIdDto.getStartReadDate(), readDateAndIdDto.getEndReadDate())) throw new GeneralException(Code.INVALID_READING_DATE); |
| 74 | + break; |
| 75 | + |
| 76 | + case reading: |
| 77 | + if(readDateAndIdDto.getStartReadDate() == null) throw new GeneralException(Code.BAD_REQUEST, "start-read-date is missing"); |
| 78 | + if(readDateAndIdDto.getEndReadDate() != null) throw new GeneralException(Code.BAD_REQUEST, "End-date and rating cannot be set in the Reading status."); |
| 79 | + break; |
| 80 | + |
| 81 | + case pending: |
| 82 | + throw new GeneralException(Code.BAD_REQUEST, "Cannot update while in pending status."); |
| 83 | + |
| 84 | + default: |
| 85 | + throw new GeneralException(Code.BAD_REQUEST, "Invalid read status."); |
| 86 | + } |
| 87 | + |
| 88 | + } |
| 89 | + |
73 | 90 |
|
74 | 91 | public Long saveReadingRecord(NewReadingRecordRequest request, String userId) { |
75 | 92 | //유효성 검사 |
@@ -111,19 +128,32 @@ public Long saveReadingRecord(NewReadingRecordRequest request, String userId) { |
111 | 128 | } |
112 | 129 |
|
113 | 130 |
|
114 | | - |
115 | 131 | public ReadingRecordResponse getReadingRecord(Long id, String userId) { |
116 | 132 | ReadingRecord readingRecord = findReadingRecord(id, userId); |
117 | 133 | return ReadingRecordResponse.fromEntity(readingRecord); |
118 | 134 | } |
119 | 135 |
|
| 136 | + public EditReadingRecordResponse getEditReadingRecord(Long readingRecordId, String userId) { |
| 137 | + User user = getUser(userId); |
| 138 | + ReadingRecord readingRecord = findReadingRecord(readingRecordId, userId); |
| 139 | + List<RecordLibraryListDto> recordLibraryListDtos = libraryRepository.findRecordLibraryListDtosInfoByUser(readingRecord, user); |
| 140 | + return EditReadingRecordResponse.from(readingRecord, recordLibraryListDtos); |
| 141 | + } |
| 142 | + |
120 | 143 | public Long getReadingRecordId(String isbn, String userId) { |
121 | 144 | ReadingRecord readingRecord = findReadingRecord(isbn, userId); |
122 | 145 | if(readingRecord == null) return null; |
123 | 146 | return readingRecord.getReadingRecordSeq(); |
124 | 147 | } |
125 | 148 |
|
126 | 149 | public void updateReadingRecord(Long id, UpdateReadingRecordRequest request, String userId) { |
| 150 | + //ReadDate에 대한 유효성 검사 |
| 151 | + if(request.getReadDateList().isPresent()) { |
| 152 | + if(request.getReadDateList().get() == null) throw new GeneralException(Code.BAD_REQUEST, "readDateIdList can't null"); |
| 153 | + else if(!request.getReadDateList().get().isEmpty()) { |
| 154 | + for(ReadDateAndIdDto readDateAndIdDto : request.getReadDateList().get()) validationReadDateAndIdDto(readDateAndIdDto); |
| 155 | + } |
| 156 | + } |
127 | 157 | ReadingRecord readingRecord = findReadingRecord(id, userId); |
128 | 158 | updateReadingRecord(request, getUser(userId), readingRecord); |
129 | 159 | } |
@@ -206,4 +236,5 @@ public List<ReadDateIndexDto> getReadDates(Long readingRecordId, String userId) |
206 | 236 | .mapToObj(i -> new ReadDateIndexDto(readDateList.get(i), i)) |
207 | 237 | .toList(); |
208 | 238 | } |
| 239 | + |
209 | 240 | } |
0 commit comments