mirror of
https://github.com/gotson/komga.git
synced 2025-12-20 15:34:17 +01:00
feat(api): add query parameter to filter on deleted series or books
This commit is contained in:
parent
5b6b817085
commit
c1d34e430c
8 changed files with 49 additions and 7 deletions
|
|
@ -13,7 +13,14 @@ class BookSearchWithReadProgress(
|
|||
seriesIds: Collection<String>? = null,
|
||||
searchTerm: String? = null,
|
||||
mediaStatus: Collection<Media.Status>? = null,
|
||||
deleted: Boolean? = null,
|
||||
val tags: Collection<String>? = null,
|
||||
val readStatus: Collection<ReadStatus>? = null,
|
||||
val authors: Collection<Author>? = null,
|
||||
) : BookSearch(libraryIds, seriesIds, searchTerm, mediaStatus)
|
||||
) : BookSearch(
|
||||
libraryIds = libraryIds,
|
||||
seriesIds = seriesIds,
|
||||
searchTerm = searchTerm,
|
||||
mediaStatus = mediaStatus,
|
||||
deleted = deleted
|
||||
)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ class SeriesSearchWithReadProgress(
|
|||
searchTerm: String? = null,
|
||||
metadataStatus: Collection<SeriesMetadata.Status>? = null,
|
||||
publishers: Collection<String>? = null,
|
||||
deleted: Boolean? = null,
|
||||
val languages: Collection<String>? = null,
|
||||
val genres: Collection<String>? = null,
|
||||
val tags: Collection<String>? = null,
|
||||
|
|
@ -27,5 +28,6 @@ class SeriesSearchWithReadProgress(
|
|||
collectionIds = collectionIds,
|
||||
searchTerm = searchTerm,
|
||||
metadataStatus = metadataStatus,
|
||||
publishers = publishers
|
||||
publishers = publishers,
|
||||
deleted = deleted,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -71,9 +71,10 @@ class BookDtoDao(
|
|||
readListId: String,
|
||||
userId: String,
|
||||
filterOnLibraryIds: Collection<String>?,
|
||||
search: BookSearchWithReadProgress,
|
||||
pageable: Pageable
|
||||
): Page<BookDto> {
|
||||
val conditions = rlb.READLIST_ID.eq(readListId)
|
||||
val conditions = rlb.READLIST_ID.eq(readListId).and(search.toCondition())
|
||||
|
||||
return findAll(conditions, userId, pageable, JoinConditions(selectReadListNumber = true), filterOnLibraryIds)
|
||||
}
|
||||
|
|
@ -267,6 +268,8 @@ class BookDtoDao(
|
|||
if (!seriesIds.isNullOrEmpty()) c = c.and(b.SERIES_ID.`in`(seriesIds))
|
||||
searchTerm?.let { c = c.and(d.TITLE.containsIgnoreCase(it)) }
|
||||
if (!mediaStatus.isNullOrEmpty()) c = c.and(m.STATUS.`in`(mediaStatus))
|
||||
if (deleted == true) c = c.and(b.DELETED_DATE.isNotNull)
|
||||
if (deleted == false) c = c.and(b.DELETED_DATE.isNull)
|
||||
if (!tags.isNullOrEmpty()) c = c.and(lower(bt.TAG).`in`(tags.map { it.lowercase() }))
|
||||
|
||||
if (readStatus != null) {
|
||||
|
|
|
|||
|
|
@ -207,6 +207,8 @@ class SeriesDtoDao(
|
|||
searchTerm?.let { c = c.and(d.TITLE.containsIgnoreCase(it)) }
|
||||
if (!metadataStatus.isNullOrEmpty()) c = c.and(d.STATUS.`in`(metadataStatus))
|
||||
if (!publishers.isNullOrEmpty()) c = c.and(lower(d.PUBLISHER).`in`(publishers.map { it.lowercase() }))
|
||||
if (deleted == true) c = c.and(s.DELETED_DATE.isNotNull)
|
||||
if (deleted == false) c = c.and(s.DELETED_DATE.isNull)
|
||||
if (!languages.isNullOrEmpty()) c = c.and(lower(d.LANGUAGE).`in`(languages.map { it.lowercase() }))
|
||||
if (!genres.isNullOrEmpty()) c = c.and(lower(g.GENRE).`in`(genres.map { it.lowercase() }))
|
||||
if (!tags.isNullOrEmpty()) c = c.and(lower(st.TAG).`in`(tags.map { it.lowercase() }))
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ import io.swagger.v3.oas.annotations.media.Content
|
|||
import io.swagger.v3.oas.annotations.media.Schema
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse
|
||||
import mu.KotlinLogging
|
||||
import org.gotson.komga.domain.model.BookSearchWithReadProgress
|
||||
import org.gotson.komga.domain.model.DuplicateNameException
|
||||
import org.gotson.komga.domain.model.Media
|
||||
import org.gotson.komga.domain.model.ROLE_ADMIN
|
||||
import org.gotson.komga.domain.model.ReadList
|
||||
import org.gotson.komga.domain.persistence.ReadListRepository
|
||||
|
|
@ -188,6 +190,8 @@ class ReadListController(
|
|||
fun getBooksForReadList(
|
||||
@PathVariable id: String,
|
||||
@AuthenticationPrincipal principal: KomgaPrincipal,
|
||||
@RequestParam(name = "media_status", required = false) mediaStatus: List<Media.Status>?,
|
||||
@RequestParam(name = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
): Page<BookDto> =
|
||||
|
|
@ -206,6 +210,10 @@ class ReadListController(
|
|||
readList.id,
|
||||
principal.user.id,
|
||||
principal.user.getAuthorizedLibraryIds(null),
|
||||
BookSearchWithReadProgress(
|
||||
mediaStatus = mediaStatus,
|
||||
deleted = deleted,
|
||||
),
|
||||
pageRequest
|
||||
)
|
||||
.map { it.restrictUrl(!principal.user.roleAdmin) }
|
||||
|
|
@ -264,6 +272,7 @@ class ReadListController(
|
|||
readList.id,
|
||||
principal.user.id,
|
||||
principal.user.getAuthorizedLibraryIds(null),
|
||||
BookSearchWithReadProgress(),
|
||||
UnpagedSorted(Sort.by(Sort.Order.asc("readList.number")))
|
||||
).filterIndexed { index, _ -> index < readProgress.lastBookRead }
|
||||
.forEach { book -> bookLifecycle.markReadProgressCompleted(book.id, principal.user) }
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ class SeriesCollectionController(
|
|||
@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 = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) @Authors authors: List<Author>?,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
|
|
@ -193,6 +194,7 @@ class SeriesCollectionController(
|
|||
metadataStatus = metadataStatus,
|
||||
readStatus = readStatus,
|
||||
publishers = publishers,
|
||||
deleted = deleted,
|
||||
languages = languages,
|
||||
genres = genres,
|
||||
tags = tags,
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ class SeriesController(
|
|||
@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 = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) @Authors authors: List<Author>?,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
|
|
@ -130,6 +131,7 @@ class SeriesController(
|
|||
metadataStatus = metadataStatus,
|
||||
readStatus = readStatus,
|
||||
publishers = publishers,
|
||||
deleted = deleted,
|
||||
languages = languages,
|
||||
genres = genres,
|
||||
tags = tags,
|
||||
|
|
@ -148,6 +150,7 @@ class SeriesController(
|
|||
fun getLatestSeries(
|
||||
@AuthenticationPrincipal principal: KomgaPrincipal,
|
||||
@RequestParam(name = "library_id", required = false) libraryIds: List<String>?,
|
||||
@RequestParam(name = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
): Page<SeriesDto> {
|
||||
|
|
@ -162,7 +165,10 @@ class SeriesController(
|
|||
)
|
||||
|
||||
return seriesDtoRepository.findAll(
|
||||
SeriesSearchWithReadProgress(principal.user.getAuthorizedLibraryIds(libraryIds)),
|
||||
SeriesSearchWithReadProgress(
|
||||
libraryIds = principal.user.getAuthorizedLibraryIds(libraryIds),
|
||||
deleted = deleted,
|
||||
),
|
||||
principal.user.id,
|
||||
pageRequest
|
||||
).map { it.restrictUrl(!principal.user.roleAdmin) }
|
||||
|
|
@ -174,6 +180,7 @@ class SeriesController(
|
|||
fun getNewSeries(
|
||||
@AuthenticationPrincipal principal: KomgaPrincipal,
|
||||
@RequestParam(name = "library_id", required = false) libraryIds: List<String>?,
|
||||
@RequestParam(name = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
): Page<SeriesDto> {
|
||||
|
|
@ -188,7 +195,10 @@ class SeriesController(
|
|||
)
|
||||
|
||||
return seriesDtoRepository.findAll(
|
||||
SeriesSearchWithReadProgress(principal.user.getAuthorizedLibraryIds(libraryIds)),
|
||||
SeriesSearchWithReadProgress(
|
||||
libraryIds = principal.user.getAuthorizedLibraryIds(libraryIds),
|
||||
deleted = deleted,
|
||||
),
|
||||
principal.user.id,
|
||||
pageRequest
|
||||
).map { it.restrictUrl(!principal.user.roleAdmin) }
|
||||
|
|
@ -200,6 +210,7 @@ class SeriesController(
|
|||
fun getUpdatedSeries(
|
||||
@AuthenticationPrincipal principal: KomgaPrincipal,
|
||||
@RequestParam(name = "library_id", required = false) libraryIds: List<String>?,
|
||||
@RequestParam(name = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
): Page<SeriesDto> {
|
||||
|
|
@ -214,7 +225,10 @@ class SeriesController(
|
|||
)
|
||||
|
||||
return seriesDtoRepository.findAllRecentlyUpdated(
|
||||
SeriesSearchWithReadProgress(principal.user.getAuthorizedLibraryIds(libraryIds)),
|
||||
SeriesSearchWithReadProgress(
|
||||
libraryIds = principal.user.getAuthorizedLibraryIds(libraryIds),
|
||||
deleted = deleted,
|
||||
),
|
||||
principal.user.id,
|
||||
pageRequest
|
||||
).map { it.restrictUrl(!principal.user.roleAdmin) }
|
||||
|
|
@ -252,6 +266,7 @@ class SeriesController(
|
|||
@RequestParam(name = "media_status", required = false) mediaStatus: List<Media.Status>?,
|
||||
@RequestParam(name = "read_status", required = false) readStatus: List<ReadStatus>?,
|
||||
@RequestParam(name = "tag", required = false) tags: List<String>?,
|
||||
@RequestParam(name = "deleted", required = false) deleted: Boolean?,
|
||||
@RequestParam(name = "unpaged", required = false) unpaged: Boolean = false,
|
||||
@Parameter(hidden = true) @Authors authors: List<Author>?,
|
||||
@Parameter(hidden = true) page: Pageable
|
||||
|
|
@ -275,6 +290,7 @@ class SeriesController(
|
|||
BookSearchWithReadProgress(
|
||||
seriesIds = listOf(seriesId),
|
||||
mediaStatus = mediaStatus,
|
||||
deleted = deleted,
|
||||
readStatus = readStatus,
|
||||
tags = tags,
|
||||
authors = authors,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@ interface BookDtoRepository {
|
|||
readListId: String,
|
||||
userId: String,
|
||||
filterOnLibraryIds: Collection<String>?,
|
||||
pageable: Pageable
|
||||
search: BookSearchWithReadProgress,
|
||||
pageable: Pageable,
|
||||
): Page<BookDto>
|
||||
|
||||
fun findByIdOrNull(bookId: String, userId: String): BookDto?
|
||||
|
|
|
|||
Loading…
Reference in a new issue