feat(api): filter series by release year

This commit is contained in:
Gauthier Roebroeck 2021-01-25 14:52:27 +08:00
parent c68951be84
commit 9133f3a441
4 changed files with 9 additions and 2 deletions

View file

@ -18,6 +18,7 @@ class SeriesSearchWithReadProgress(
val genres: Collection<String>? = null,
val tags: Collection<String>? = null,
val ageRatings: Collection<Int?>? = null,
val releaseYears: Collection<String>? = null,
val readStatus: Collection<ReadStatus>? = null
) : SeriesSearch(
libraryIds = libraryIds,

View file

@ -218,6 +218,8 @@ class SeriesDtoDao(
val c2 = if (ageRatings.filterNotNull().isNotEmpty()) d.AGE_RATING.`in`(ageRatings.filterNotNull()) else DSL.falseCondition()
c = c.and(c1.or(c2))
}
// cast to String is necessary for SQLite, else the years in the IN block are coerced to Int, even though YEAR for SQLite uses strftime (string)
if(!releaseYears.isNullOrEmpty()) c = c.and(DSL.year(bma.RELEASE_DATE).cast(String::class.java).`in`(releaseYears))
return c
}

View file

@ -166,6 +166,7 @@ class SeriesCollectionController(
@RequestParam(name = "genre", required = false) genres: List<String>?,
@RequestParam(name = "tag", required = false) tags: List<String>?,
@RequestParam(name = "age_rating", required = false) ageRatings: List<String>?,
@RequestParam(name = "release_year", required = false) release_years: List<String>?,
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
@Parameter(hidden = true) page: Pageable
): Page<SeriesDto> =
@ -190,7 +191,8 @@ class SeriesCollectionController(
languages = languages,
genres = genres,
tags = tags,
ageRatings = ageRatings?.map { it.toIntOrNull() }
ageRatings = ageRatings?.map { it.toIntOrNull() },
releaseYears = release_years,
)
seriesDtoRepository.findByCollectionId(collection.id, seriesSearch, principal.user.id, pageRequest)

View file

@ -82,6 +82,7 @@ class SeriesController(
@RequestParam(name = "genre", required = false) genres: List<String>?,
@RequestParam(name = "tag", required = false) tags: List<String>?,
@RequestParam(name = "age_rating", required = false) ageRatings: List<String>?,
@RequestParam(name = "release_year", required = false) release_years: List<String>?,
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
@Parameter(hidden = true) page: Pageable
): Page<SeriesDto> {
@ -107,7 +108,8 @@ class SeriesController(
languages = languages,
genres = genres,
tags = tags,
ageRatings = ageRatings?.map { it.toIntOrNull() }
ageRatings = ageRatings?.map { it.toIntOrNull() },
releaseYears = release_years,
)
return seriesDtoRepository.findAll(seriesSearch, principal.user.id, pageRequest)