revamp logic to getAll series to reduce the database load

This commit is contained in:
Gauthier Roebroeck 2019-12-16 18:22:49 +08:00
parent 8db87afd52
commit 66f3d80c9e

View file

@ -53,19 +53,25 @@ class SeriesController(
)
return mutableListOf<Specification<Series>>().let { specs ->
when {
!principal.user.sharedAllLibraries && !libraryIds.isNullOrEmpty() -> {
val authorizedLibraryIDs = libraryIds.intersect(principal.user.sharedLibraries.map { it.id })
if (authorizedLibraryIDs.isEmpty()) return@let Page.empty<Series>(pageRequest)
else specs.add(Series::library.`in`(libraryRepository.findAllById(authorizedLibraryIDs)))
}
!principal.user.sharedAllLibraries -> specs.add(Series::library.`in`(principal.user.sharedLibraries))
!libraryIds.isNullOrEmpty() -> {
val values = libraryRepository.findAllById(libraryIds)
specs.add(Series::library.`in`(values))
}
}
if (!searchTerm.isNullOrEmpty()) {
specs.add(Series::name.likeLower("%$searchTerm%"))
}
if (!principal.user.sharedAllLibraries) {
specs.add(Series::library.`in`(principal.user.sharedLibraries))
}
if (!libraryIds.isNullOrEmpty()) {
val libraries = libraryRepository.findAllById(libraryIds)
specs.add(Series::library.`in`(libraries))
}
if (specs.isNotEmpty()) {
seriesRepository.findAll(specs.reduce { acc, spec -> acc.and(spec)!! }, pageRequest)
} else {