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
15 changes: 15 additions & 0 deletions src/main/java/org/websoso/WSSServer/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.websoso.WSSServer.dto.user.UserNovelCountGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserGenrePreferencesGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelsGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelsGetResponseLegacy;
import org.websoso.WSSServer.dto.userNovel.UserTasteAttractivePointPreferencesAndKeywordsGetResponse;
import org.websoso.WSSServer.service.FeedService;
import org.websoso.WSSServer.service.UserNovelService;
Expand Down Expand Up @@ -166,6 +167,20 @@ public ResponseEntity<UserNovelAndNovelsGetResponse> getUserNovelsAndNovels(@Aut
lastUserNovelId, size, sortCriteria, updatedSince));
}

@GetMapping("/{userId}/novels/legacy")
public ResponseEntity<UserNovelAndNovelsGetResponseLegacy> getUserNovelsAndNovelsOld(
@AuthenticationPrincipal User visitor,
@PathVariable("userId") Long userId,
@RequestParam("readStatus") String readStatus,
@RequestParam("lastUserNovelId") Long lastUserNovelId,
@RequestParam("size") int size,
@RequestParam("sortCriteria") SortCriteria sortCriteria) {
return ResponseEntity
.status(OK)
.body(userNovelService.getUserNovelsAndNovelsLegacy(visitor, userId, readStatus, lastUserNovelId, size,
sortCriteria));
}

@GetMapping("/{userId}/feeds")
public ResponseEntity<UserFeedsGetResponse> getUserFeeds(@AuthenticationPrincipal User visitor,
@PathVariable("userId") Long userId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.websoso.WSSServer.dto.userNovel;

import org.websoso.WSSServer.domain.UserNovel;

public record UserNovelAndNovelGetResponseLegacy(
Long userNovelId,
Long novelId,
String author,
String novelImage,
String title,
Float novelRating
) {
public static UserNovelAndNovelGetResponseLegacy of(UserNovel userNovel) {
return new UserNovelAndNovelGetResponseLegacy(
userNovel.getUserNovelId(),
userNovel.getNovel().getNovelId(),
userNovel.getNovel().getAuthor(),
userNovel.getNovel().getNovelImage(),
userNovel.getNovel().getTitle(),
userNovel.getUserNovelRating()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.websoso.WSSServer.dto.userNovel;

import java.util.List;

public record UserNovelAndNovelsGetResponseLegacy(
Long userNovelCount,
Boolean isLoadable,
List<UserNovelAndNovelGetResponseLegacy> userNovels
) {
public static UserNovelAndNovelsGetResponseLegacy of(Long userNovelCount, Boolean isLoadable,
List<UserNovelAndNovelGetResponseLegacy> userNovelAndNovelGetResponseLegacies) {
return new UserNovelAndNovelsGetResponseLegacy(userNovelCount, isLoadable,
userNovelAndNovelGetResponseLegacies);
}
}
38 changes: 38 additions & 0 deletions src/main/java/org/websoso/WSSServer/service/UserNovelService.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
import org.websoso.WSSServer.dto.userNovel.UserGenrePreferenceGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserGenrePreferencesGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelGetResponseLegacy;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelsGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelAndNovelsGetResponseLegacy;
import org.websoso.WSSServer.dto.userNovel.UserNovelCreateRequest;
import org.websoso.WSSServer.dto.userNovel.UserNovelGetResponse;
import org.websoso.WSSServer.dto.userNovel.UserNovelUpdateRequest;
Expand Down Expand Up @@ -302,6 +304,42 @@ public UserNovelAndNovelsGetResponse getUserNovelsAndNovels(User visitor, Long o
return new UserNovelAndNovelsGetResponse(totalCount, isLoadable, userNovelAndNovelGetResponses);
}

@Transactional(readOnly = true)
public UserNovelAndNovelsGetResponseLegacy getUserNovelsAndNovelsLegacy(User visitor, Long ownerId,
String readStatus,
Long lastUserNovelId, int size,
SortCriteria sortCriteria) {
User owner = userService.getUserOrException(ownerId);

if (isProfileInaccessible(visitor, ownerId, owner)) {
throw new CustomUserException(PRIVATE_PROFILE_STATUS, "the profile status of the user is set to private");
}

boolean isAscending = sortCriteria.isOld();
List<String> readStatuses = null;
Boolean isInterest = null;

if ("INTEREST".equalsIgnoreCase(readStatus)) {
isInterest = true;
} else {
readStatuses = List.of(readStatus);
}

List<UserNovel> userNovels = userNovelRepository.findFilteredUserNovels(ownerId, isInterest, readStatuses,
null, null, null, lastUserNovelId, size, isAscending, null);

Long totalCount = userNovelRepository.countByUserIdAndFilters(ownerId, isInterest, readStatuses,
null, null, null, null);

boolean isLoadable = userNovels.size() == size;

List<UserNovelAndNovelGetResponseLegacy> userNovelAndNovelGetResponseLegacies = userNovels.stream()
.map(UserNovelAndNovelGetResponseLegacy::of)
.toList();

return new UserNovelAndNovelsGetResponseLegacy(totalCount, isLoadable, userNovelAndNovelGetResponseLegacies);
}

private List<UserNovelAndNovelGetResponse> buildUserNovelAndNovelGetResponses(List<UserNovel> userNovels,
Long ownerId, boolean isOwner) {
Map<Long, List<String>> feedMap = getFeedsGroupedByNovel(userNovels, ownerId, isOwner);
Expand Down
Loading