Skip to content
Snippets Groups Projects

Fix the loading time of puzzle list

7 files
+ 156
96
Compare changes
  • Side-by-side
  • Inline

Files

@@ -36,7 +36,9 @@ import nl.tudelft.labracore.api.dto.PersonDetailsDTO;
import nl.tudelft.labracore.lib.security.user.AuthenticatedPerson;
import nl.tudelft.labracore.lib.security.user.Person;
import nl.tudelft.pupple.controller.utility.PageUtil;
import nl.tudelft.pupple.dto.view.PuzzleOverviewDTO;
import nl.tudelft.pupple.model.Puzzle;
import nl.tudelft.pupple.model.PuzzleAttempt;
import nl.tudelft.pupple.model.labracore.PupplePerson;
import nl.tudelft.pupple.repository.PuzzleAttemptRepository;
import nl.tudelft.pupple.repository.PuzzleRepository;
@@ -90,53 +92,42 @@ public class PersonController {
PersonDetailsDTO otherPerson = personControllerApi.getPersonById(personId).block();
List<Puzzle> puzzlesFeatured;
// List<Puzzle> puzzlesFeatured;
Page<Puzzle> puzzlesFeatured;
boolean isOwner = person.getId() == personId;
boolean canViewFuturePuzzles = isOwner || authorisationService.isAdmin();
if (unassigned != null) {
if (canViewFuturePuzzles) {
puzzlesFeatured = puzzleRepository.findByDayUsedIsNullAndCreator(pupplePerson);
puzzlesFeatured = puzzleRepository.findByDayUsedIsNullAndCreator(pupplePerson, pageable);
} else {
puzzlesFeatured = new ArrayList<>();
puzzlesFeatured = PageUtil.pageFromList(new ArrayList<>(), pageable);
}
} else {
if (canViewFuturePuzzles) {
puzzlesFeatured = puzzleRepository.findByCreator(pupplePerson);
puzzlesFeatured = puzzleRepository.findByCreator(pupplePerson, pageable);
} else {
puzzlesFeatured = puzzleRepository.findByDayUsedIsBeforeAndCreator(LocalDate
.now().plusDays(1), pupplePerson);
.now().plusDays(1), pupplePerson, pageable);
}
}
HashMap<Long, String> displayNames = new HashMap<>();
puzzlesFeatured.stream()
.filter(puzzle -> puzzle.getCreator() != null && puzzle.getCreator().getPublicProfile())
.map(puzzle -> puzzle.getCreator().getId())
.forEach((id) -> displayNames.put(id,
personControllerApi.getPersonById(id).block().getDisplayName()));
HashMap<Long, Long> attempts = new HashMap<>();
puzzlesFeatured.stream()
.filter(puzzle -> puzzleAttemptRepository.getByPersonIdAndPuzzleId(person.getId(),
puzzle.getId()) != null)
.forEach((puzzle) -> attempts.put(puzzle.getId(),
(long) puzzleAttemptRepository.getByPersonIdAndPuzzleId(
person.getId(), puzzle.getId()).getGuesses().size()));
List<PuzzleOverviewDTO> overviewPuzzles = new ArrayList<>();
puzzlesFeatured.sort(Comparator
.comparing(Puzzle::getDayUsed, Comparator.nullsFirst(Comparator.naturalOrder()))
.reversed());
Page<Puzzle> puzzlePage = PageUtil.pageFromList(puzzlesFeatured, pageable);
Set<Puzzle> puzzlesSolved = new HashSet<>(puzzleAttemptService
.filterSolvedPuzzles(person, puzzlesFeatured));
Set<Puzzle> puzzlesSolved = new HashSet<>(
puzzleAttemptService.filterSolvedPuzzles(person, new ArrayList<>()));
for (Puzzle p : puzzlesFeatured) {
PuzzleAttempt attempt = puzzleAttemptRepository.getByPersonIdAndPuzzleId(person.getId(),
p.getId());
int guesses = (attempt == null) ? 0 : attempt.getGuesses().size(); // 0 if not attempt
overviewPuzzles.add(new PuzzleOverviewDTO(p, null, guesses, puzzlesSolved.contains(p)));
}
model.addAttribute("displayName", otherPerson.getDisplayName());
model.addAttribute("pupplePerson", pupplePerson);
model.addAttribute("solved", puzzlesSolved);
model.addAttribute("puzzles", puzzlePage);
model.addAttribute("puzzles", puzzlesFeatured);
model.addAttribute("overviewPuzzles", overviewPuzzles);
model.addAttribute("isOwner", isOwner);
model.addAttribute("displayNames", displayNames);
model.addAttribute("guessAmounts", attempts);
return "profile/view";
}
Loading