Skip to content

Commit 2b02b0a

Browse files
committed
🔀 Merge
2 parents 1c7bf81 + 9bf181a commit 2b02b0a

File tree

5 files changed

+114
-7
lines changed

5 files changed

+114
-7
lines changed

src/main/java/com/boggle_boggle/bbegok/controller/ReadingRecordController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.boggle_boggle.bbegok.dto.request.NewReadingRecordRequest;
77
import com.boggle_boggle.bbegok.dto.request.UpdateReadingRecordRequest;
88
import com.boggle_boggle.bbegok.dto.response.BookDetailResponse;
9+
import com.boggle_boggle.bbegok.dto.response.EditReadingRecordResponse;
910
import com.boggle_boggle.bbegok.dto.response.LibraryResponse;
1011
import com.boggle_boggle.bbegok.dto.response.ReadingRecordResponse;
1112
import com.boggle_boggle.bbegok.entity.Book;
@@ -46,6 +47,13 @@ public DataResponseDto<Long> saveReadingRecord(
4647
return DataResponseDto.of(readingRecordService.saveReadingRecord(request, userDetails.getUsername()));
4748
}
4849

50+
//독서기록 수정창 조회
51+
@GetMapping("/{id}/edit")
52+
public DataResponseDto<EditReadingRecordResponse> getUpdateReadingRecord(@PathVariable(name = "id") Long readingRecordId,
53+
@AuthenticationPrincipal UserDetails userDetails) {
54+
return DataResponseDto.of(readingRecordService.getEditReadingRecord(readingRecordId, userDetails.getUsername()));
55+
}
56+
4957
//독서기록 수정
5058
@PatchMapping("/{id}")
5159
public DataResponseDto<Void> updateReadingRecord(@PathVariable(name = "id") Long readingRecordId,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.boggle_boggle.bbegok.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
import lombok.ToString;
7+
8+
@Getter
9+
@ToString
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
public class RecordLibraryListDto {
13+
private Long libraryId;
14+
private String libraryName;
15+
private boolean isSelected;
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.boggle_boggle.bbegok.dto.response;
2+
3+
import com.boggle_boggle.bbegok.dto.*;
4+
import com.boggle_boggle.bbegok.entity.ReadingRecord;
5+
import com.boggle_boggle.bbegok.enums.ReadStatus;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
11+
import java.util.List;
12+
13+
@Getter
14+
@Builder
15+
@AllArgsConstructor
16+
@NoArgsConstructor
17+
public class EditReadingRecordResponse {
18+
private Long readingRecordId;
19+
private Double rating;
20+
private List<ReadDateAndIdDto> readDateList;
21+
private List<RecordLibraryListDto> libraries;
22+
private Boolean isBookVisible;
23+
24+
public static EditReadingRecordResponse from(ReadingRecord entity,
25+
List<RecordLibraryListDto> libraryDtos){
26+
return EditReadingRecordResponse.builder()
27+
.readingRecordId(entity.getReadingRecordSeq())
28+
.rating(entity.getRating())
29+
.readDateList(entity.getReadDateList().stream()
30+
.filter(readDate -> !readDate.getStatus().equals(ReadStatus.pending))
31+
.map(ReadDateAndIdDto::new).toList())
32+
.libraries(libraryDtos)
33+
.isBookVisible(entity.getIsBooksVisible())
34+
.build();
35+
}
36+
37+
}

src/main/java/com/boggle_boggle/bbegok/repository/LibraryRepository.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.boggle_boggle.bbegok.repository;
22

33
import com.boggle_boggle.bbegok.dto.LibrariesDto;
4+
import com.boggle_boggle.bbegok.dto.RecordLibraryListDto;
45
import com.boggle_boggle.bbegok.entity.Library;
6+
import com.boggle_boggle.bbegok.entity.ReadingRecord;
57
import com.boggle_boggle.bbegok.entity.user.User;
68
import org.springframework.data.jpa.repository.JpaRepository;
79
import org.springframework.data.jpa.repository.Query;
@@ -24,4 +26,17 @@ public interface LibraryRepository extends JpaRepository<Library, Long> {
2426
//유저의 특정 서재 조회
2527
Optional<Library> findByUserAndLibrarySeq(User user, Long libraryId);
2628

29+
//레코드에 대한 서재 매핑 true/false정보
30+
@Query("""
31+
SELECT new com.boggle_boggle.bbegok.dto.RecordLibraryListDto(
32+
l.librarySeq,
33+
l.libraryName,
34+
CASE WHEN r.readingRecord = :readingRecord THEN true ELSE false END
35+
)
36+
FROM Library l
37+
LEFT JOIN ReadingRecordLibraryMapping r
38+
ON l.librarySeq = r.library.librarySeq AND (r.readingRecord = :readingRecord)
39+
WHERE l.user = :user
40+
""")
41+
List<RecordLibraryListDto> findRecordLibraryListDtosInfoByUser(ReadingRecord readingRecord, User user);
2742
}

src/main/java/com/boggle_boggle/bbegok/service/ReadingRecordService.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package com.boggle_boggle.bbegok.service;
22

3-
import com.boggle_boggle.bbegok.dto.PagesDto;
43
import com.boggle_boggle.bbegok.dto.ReadDateAndIdDto;
5-
import com.boggle_boggle.bbegok.dto.ReadDateDto;
64
import com.boggle_boggle.bbegok.dto.ReadDateIndexDto;
7-
import com.boggle_boggle.bbegok.dto.request.NewNoteRequest;
5+
import com.boggle_boggle.bbegok.dto.RecordLibraryListDto;
86
import com.boggle_boggle.bbegok.dto.request.NewReadingRecordRequest;
97
import com.boggle_boggle.bbegok.dto.request.UpdateReadingRecordRequest;
108
import com.boggle_boggle.bbegok.dto.response.BookDetailResponse;
9+
import com.boggle_boggle.bbegok.dto.response.EditReadingRecordResponse;
1110
import com.boggle_boggle.bbegok.dto.response.ReadingRecordResponse;
1211
import com.boggle_boggle.bbegok.entity.*;
13-
import com.boggle_boggle.bbegok.entity.embed.Pages;
1412
import com.boggle_boggle.bbegok.entity.user.User;
1513
import com.boggle_boggle.bbegok.enums.ReadStatus;
1614
import com.boggle_boggle.bbegok.exception.Code;
@@ -19,12 +17,10 @@
1917
import com.boggle_boggle.bbegok.repository.user.UserRepository;
2018
import com.boggle_boggle.bbegok.utils.LocalDateTimeUtil;
2119
import lombok.RequiredArgsConstructor;
22-
import org.openapitools.jackson.nullable.JsonNullable;
2320
import org.springframework.stereotype.Service;
2421
import org.springframework.transaction.annotation.Transactional;
2522

2623
import java.util.*;
27-
import java.util.stream.Collectors;
2824
import java.util.stream.IntStream;
2925

3026
@Service
@@ -70,6 +66,27 @@ private void validationNewReadingRecordRequest(NewReadingRecordRequest request)
7066

7167
}
7268

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+
7390

7491
public Long saveReadingRecord(NewReadingRecordRequest request, String userId) {
7592
//유효성 검사
@@ -111,19 +128,32 @@ public Long saveReadingRecord(NewReadingRecordRequest request, String userId) {
111128
}
112129

113130

114-
115131
public ReadingRecordResponse getReadingRecord(Long id, String userId) {
116132
ReadingRecord readingRecord = findReadingRecord(id, userId);
117133
return ReadingRecordResponse.fromEntity(readingRecord);
118134
}
119135

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+
120143
public Long getReadingRecordId(String isbn, String userId) {
121144
ReadingRecord readingRecord = findReadingRecord(isbn, userId);
122145
if(readingRecord == null) return null;
123146
return readingRecord.getReadingRecordSeq();
124147
}
125148

126149
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+
}
127157
ReadingRecord readingRecord = findReadingRecord(id, userId);
128158
updateReadingRecord(request, getUser(userId), readingRecord);
129159
}
@@ -206,4 +236,5 @@ public List<ReadDateIndexDto> getReadDates(Long readingRecordId, String userId)
206236
.mapToObj(i -> new ReadDateIndexDto(readDateList.get(i), i))
207237
.toList();
208238
}
239+
209240
}

0 commit comments

Comments
 (0)