docs(api): add parameter descriptions for app contoller annotations#438
docs(api): add parameter descriptions for app contoller annotations#438
Conversation
## [2.3.0](v2.2.6...v2.3.0) (2026-03-21) ### Features * **release:** document develop-based stable release previews ([930e526](930e526)) ### Bug Fixes * **api:** fix potential memory leaks in file processing ([031e8ae](031e8ae)) * **ci:** correct artifact download action pin ([37ca101](37ca101)) * **ci:** publish PR test results from workflow_run ([11a76bf](11a76bf)) * **ci:** repair release preview and test result publishing ([afa5b81](afa5b81)) * drop telemetry from app ([#52](#52)) ([4d82cb7](4d82cb7)) * **ui:** repair frontend compile after rebrand ([fea1ec6](fea1ec6)) ### Refactors * **build:** rename frontend dist output to grimmory ([ecf388f](ecf388f)) * **i18n:** rename booklore translation keys to grimmory ([eb94afa](eb94afa)) * **metadata:** move default parser from Amazon to Goodreads ([e252122](e252122)) * pull kepubify & ffprobe during build ([#50](#50)) ([1c15629](1c15629)) * **ui:** rebrand frontend surfaces to grimmory ([d786dd8](d786dd8)) ### Chores * **api:** remove the custom startup banner ([98c9b1a](98c9b1a)) * **deps:** bump flatted from 3.4.1 to 3.4.2 in /booklore-ui ([#73](#73)) ([c4bd0c7](c4bd0c7)) * **funding:** point support links at opencollective ([55c0ac0](55c0ac0)) * **release:** 2.2.7 [skip ci] ([0b5e24c](0b5e24c)) * remove old verbose PR template, replace with temporary more low-key one. ([#84](#84)) ([b868526](b868526)) * **ui:** drop financial support dialog ([#21](#21)) ([62be6b1](62be6b1)) ### Documentation * updated supported file formats in README.md ([#68](#68)) ([f912e80](f912e80)) ### Style * **i18n:** normalize translation json formatting ([#89](#89)) ([857290d](857290d)) * **ui:** simplify the topbar logo branding ([0416d48](0416d48)) (cherry picked from commit c335c7b)
…ooklore PR Port) (#16) * fix(api): Correct format for fixed-layout epub when using Kobo Sync * chore: Cleanup duplicate code * feat: Cache fixed-layout property in db * fix: Missing nullcheck in after retrieving BookFileEntity * fix: Remove memory leak in EpubReaderService.java * chore: Avoid opening the epub twice for fixed-layout extraction * chore: Fix DB migration from rebase --------- Co-authored-by: brios <127139797+balazs-szucs@users.noreply.github.com>
#79) * chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1) Dependabot couldn't find the original pull request head commit, ea510f4. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (#2) Dependabot couldn't find the original pull request head commit, faed6bf. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (#3) Dependabot couldn't find the original pull request head commit, f110823. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (#6) Dependabot couldn't find the original pull request head commit, 9a8d7a1. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(archive): infer archive type via Magic Numbers instead of filename * fix(archive): improve archive type detection and improve logging for cover image retrieval --------- Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…unt (#87) * fix: fixed halves missing from series number in Hardcover metadata * fix: use series primary books count
* refactor(frontend): migrate state to TanStack Query and signals * fix(frontend): keep book cache in sync after patches
…hints to supported versions (#76) * chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1) Dependabot couldn't find the original pull request head commit, ea510f4. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (#2) Dependabot couldn't find the original pull request head commit, faed6bf. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (#3) Dependabot couldn't find the original pull request head commit, f110823. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (#6) Dependabot couldn't find the original pull request head commit, 9a8d7a1. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs(security): update security policy with reporting guidelines and hints to supported versions --------- Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…or improved configuration (#139)
…oring services (#137) * refactor(concurrency): improve thread management and locking in monitoring services * chore: remove unnecessary comments
the kepubify / ffprobe binaries may be on disk but they're in the "data" directory under `tools` rather than under the current directory
… in the app (#158) Co-authored-by: Zack Yancey <yanceyz@proton.me>
…100) * chore(build): migrate Gradle build scripts from Groovy to Kotlin DSL * chore(docker): update Gradle build files to Kotlin DSL in Dockerfile
…tead of better fields like ISBN in Goodreads/Bookdrop (#85) * chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#1) Dependabot couldn't find the original pull request head commit, ea510f4. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (#2) Dependabot couldn't find the original pull request head commit, faed6bf. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/build-push-action from 6.19.2 to 7.0.0 (#3) Dependabot couldn't find the original pull request head commit, f110823. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump docker/login-action from 3.7.0 to 4.0.0 (#6) Dependabot couldn't find the original pull request head commit, 9a8d7a1. Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(metadata): fix metadata fetching relying for filename "first" instead of better fields like ISBN in Goodreads/Bookdrop * perf(ci): speed up image builds and centralize cache writes - Image builds: - pin frontend and backend Docker build stages to the build platform so multi-arch packaging can reuse architecture-independent work - add an Angular build cache mount and move dynamic version metadata to the end of the runtime stage so static layers stay reusable across tags - reduce image workflow checkout depth and keep preview builds on `linux/amd64` only to avoid unnecessary QEMU and history overhead - Cache policy: - make CI packaging smoke builds consume the shared image cache without writing new BuildKit cache state - make normal preview builds consume shared GHA and registry caches without mutating the canonical cache - keep nightly and stable release builds as the workflows that refresh the shared image cache in both GHA and registry backends - Preview override: - add a `refresh_shared_cache` input to the preview workflow for an explicit no-cache rebuild that repopulates the shared cache when maintainers need to bust and refresh it - keep the default preview behavior optimized for fast disposable builds rather than cache churn - Validation: - keep workflow YAML parsing clean after the cache-policy changes - keep `git diff --check` clean for the touched Docker and workflow files * docs: Add a note about how to make a release * chore: remove unncesary comments --------- Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: James Cox <james@imaj.es>
…nt of frontend lint issues (#163) * feat(lint): add Angular Lint Threshold workflow for CI integration * Update workflow name for clarity in CI integration * fix(lint): update LINT_THRESHOLD to 725 in CI checks * Also run workflow on main branch Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(lint): simplify lint problem count calculation using jq * feat(lint): enhance quality threshold checks and reporting in CI workflow * refactor(lint): rename lint step for clarity in CI workflow * fix(lint): swap lint warning and error thresholds for correct configuration * fix(lint): update build warning threshold and correct log processing for accurate warning count * refactor(lint): remove unnecessary working-directory specification for quality thresholds step --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* refactor(icon): fix SVG icon loading straight to memory * refactor(icon): loading with improved error handling * refactor(icon): add flag for SVG icons loading state * chore(release): 2.3.0 [skip ci] ## [2.3.0](v2.2.6...v2.3.0) (2026-03-21) ### Features * **release:** document develop-based stable release previews ([930e526](930e526)) ### Bug Fixes * **api:** fix potential memory leaks in file processing ([031e8ae](031e8ae)) * **ci:** correct artifact download action pin ([37ca101](37ca101)) * **ci:** publish PR test results from workflow_run ([11a76bf](11a76bf)) * **ci:** repair release preview and test result publishing ([afa5b81](afa5b81)) * drop telemetry from app ([#52](#52)) ([4d82cb7](4d82cb7)) * **ui:** repair frontend compile after rebrand ([fea1ec6](fea1ec6)) ### Refactors * **build:** rename frontend dist output to grimmory ([ecf388f](ecf388f)) * **i18n:** rename booklore translation keys to grimmory ([eb94afa](eb94afa)) * **metadata:** move default parser from Amazon to Goodreads ([e252122](e252122)) * pull kepubify & ffprobe during build ([#50](#50)) ([1c15629](1c15629)) * **ui:** rebrand frontend surfaces to grimmory ([d786dd8](d786dd8)) ### Chores * **api:** remove the custom startup banner ([98c9b1a](98c9b1a)) * **deps:** bump flatted from 3.4.1 to 3.4.2 in /booklore-ui ([#73](#73)) ([c4bd0c7](c4bd0c7)) * **funding:** point support links at opencollective ([55c0ac0](55c0ac0)) * **release:** 2.2.7 [skip ci] ([0b5e24c](0b5e24c)) * remove old verbose PR template, replace with temporary more low-key one. ([#84](#84)) ([b868526](b868526)) * **ui:** drop financial support dialog ([#21](#21)) ([62be6b1](62be6b1)) ### Documentation * updated supported file formats in README.md ([#68](#68)) ([f912e80](f912e80)) ### Style * **i18n:** normalize translation json formatting ([#89](#89)) ([857290d](857290d)) * **ui:** simplify the topbar logo branding ([0416d48](0416d48)) * fix(book-browser): prevent memory leaks by unsubscribing from observables (#80) * test(icon): remove redundant initialization in IconServiceTest --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Alex Fair <20632147+afairgiant@users.noreply.github.com>
- Command surface: - add a root `Justfile` with namespaced `api`, `ui`, and `release` modules so humans and agents can use the same entrypoints from the repo root - add project-local Justfiles for `booklore-api`, `booklore-ui`, and `tools/release` so each area remains self-contained and can still be driven from inside its own directory - standardize local developer workflows around `just check`, `just test`, `just api run`, `just ui dev`, `just db-up`, and `just image-build` - Workflow integration: - update the reusable test suite workflow to install `just` and run backend and frontend CI steps through the Justfiles instead of hardcoded shell commands - update the semantic-release workflows to install `just` and invoke release tooling via `just release install`, `just release preview`, and `just release run` - keep the Docker image publication workflows on the native Docker actions while moving the project-command logic into the canonical command surface - Documentation: - split backend and frontend implementation guidance into `booklore-api/README.md`, `booklore-api/CONTRIBUTING.md`, `booklore-ui/README.md`, and `booklore-ui/CONTRIBUTING.md` - simplify the top-level `README.md` and `CONTRIBUTING.md` so they stay focused on overview, policy, and navigation while pointing to component-specific guides for deeper detail - align contributor-facing examples on the `just` interface instead of mixing ad hoc Gradle, npm, Docker, and Compose commands - Developer environment: - add `mise.toml` to pin the expected Java and Node toolchain versions for local work - switch the development Compose defaults from the old Booklore database values to Grimmory-oriented defaults - keep the command layout ready for a future API/UI split without forcing that packaging change yet
- Issue intake: - rebrand the bug and feature request forms from Booklore to Grimmory - remove the old `[Bug]` and `[Feature]` title prefixes so issue titles can stay natural - default issue intake to `needs-triage` while relying on GitHub Issue Types for the primary classification - New templates: - add a dedicated enhancement template for smaller quality-of-life and UX improvements - add a documentation template for doc fixes, missing guides, and confusing setup flows - add a performance template for runtime, UI, build, and operational performance problems - Type alignment: - map the templates onto the repo's issue-type taxonomy with `Bug`, `Feature`, `Enhancement`, `Documentation`, and `Performance` - keep the larger feature template distinct from the smaller enhancement template so incoming requests are easier to triage
- Community links: - update the issue-template support link to use the canonical Grimmory Discord invite from `README.md` - update the contributing guide to point at the same Discord server - Consistency: - remove the stale invite URL so issue intake, contributor docs, and the repository landing page all reference the same community link
- Community links: - replace the old Discord invite code with the new `9YJ7HB4n8T` invite in the repository README - update the contributor guide to point at the same server - align the issue-template support link with the same canonical invite - Consistency: - keep the public docs and issue intake flow on a single Discord destination so users and contributors land in the right community space
- Agent workflow: - add a root `AGENTS.md` focused on agent execution rather than general contributor onboarding - document the expected command surface, branch target, and staged verification order - Repo boundaries: - map the backend and frontend layout with the key source, resource, test, i18n, and asset paths - call out ownership boundaries for deploy, packaging, tools, docs, and shared assets - Project rules: - capture backend and frontend conventions that agents should follow before editing or validating work - include repo-specific PR expectations such as linked issues, test output, and UI evidence
- GitHub Actions caching: - replace implicit setup-java cache writes with explicit Gradle cache restore/save steps - only persist the shared Gradle cache from long-lived develop and release workflows - remove the unnecessary QEMU setup from the single-arch smoke build - disable QEMU image caching in multi-arch publish workflows to stop repeated binfmt cache entries - CodeQL workflow: - replace the generated advanced template with a pinned repo-owned CodeQL workflow - add per-ref concurrency to cancel superseded CodeQL runs before they create more caches - restrict dependency caching to Java, using restore-only on pull requests and full caching on long-lived runs - disable trap caching and turn off PR overlay database caching to avoid repetitive low-value CodeQL caches - Validation: - validated the edited workflow YAML with yq - did not execute the workflows locally
- Planning: - add the staged frontend migration plan under docs/plans - record the intended rename, Yarn 4 adoption, lint rollout, and PR replay sequence - Cleanup ledger: - capture the remaining frontend Booklore-era aliases that should survive the cutover temporarily - document explicit triggers for removing each compatibility shim after the dust settles
…ions (#348) * fix(metadata): add support for audible fields in metadata refresh options * fix(metadata): add support for Lubimyczytac and Audible ratings in scoring * fix(metadata): update default audible ratings and review counts to zero * fix(metadata): add reRenderOnLangChange to TranslocoService provider in tests * fix(tests): update MetadataProviderFieldSelectorComponent tests for async setup and translation
* refactor(file): improve path handling and validation * fix: update XML escaping to use escapeXml10 for improved compatibility * feat(mime): integrate Apache Tika for content-based MIME detection across services * test: enhance MultipartFile tests with input stream handling and content type validation
* chore(deps): bump the npm-dependencies group across 1 directory with 30 updates Bumps the npm-dependencies group with 30 updates in the /frontend directory: | Package | From | To | | --- | --- | --- | | [@angular/animations](https://github.com/angular/angular/tree/HEAD/packages/animations) | `21.2.6` | `21.2.7` | | [@angular/cdk](https://github.com/angular/components) | `21.2.4` | `21.2.5` | | [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `21.2.6` | `21.2.7` | | [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `21.2.6` | `21.2.7` | | [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `21.2.6` | `21.2.7` | | [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `21.2.6` | `21.2.7` | | [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `21.2.6` | `21.2.7` | | [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) | `21.2.6` | `21.2.7` | | [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `21.2.6` | `21.2.7` | | [@angular/service-worker](https://github.com/angular/angular/tree/HEAD/packages/service-worker) | `21.2.6` | `21.2.7` | | [@embedpdf/pdfium](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/pdfium) | `2.12.1` | `2.14.0` | | @embedpdf/snippet | `2.12.1` | `2.14.0` | | [@tanstack/angular-query-experimental](https://github.com/TanStack/query/tree/HEAD/packages/angular-query-experimental) | `5.95.2` | `5.96.2` | | [ng2-charts](https://github.com/valor-software/ng2-charts) | `8.0.0` | `10.0.0` | | [ngx-extended-pdf-viewer](https://github.com/stephanrauh/ngx-extended-pdf-viewer) | `25.6.4` | `26.0.0` | | [ngx-sse-client](https://github.com/marcospds/ngx-sse-client) | `20.0.1` | `21.0.0` | | [primeng](https://github.com/primefaces/primeng/tree/HEAD/packages/primeng) | `21.1.3` | `21.1.5` | | [uuid](https://github.com/uuidjs/uuid) | `11.1.0` | `13.0.0` | | [@analogjs/vite-plugin-angular](https://github.com/analogjs/analog) | `2.3.1` | `2.4.0` | | [@analogjs/vitest-angular](https://github.com/analogjs/analog) | `2.3.1` | `2.4.0` | | [@angular-devkit/architect](https://github.com/angular/angular-cli) | `0.2102.4` | `0.2102.6` | | [@angular-devkit/schematics](https://github.com/angular/angular-cli) | `21.2.4` | `21.2.6` | | [@angular/build](https://github.com/angular/angular-cli) | `21.2.4` | `21.2.6` | | [@angular/cli](https://github.com/angular/angular-cli) | `21.2.4` | `21.2.6` | | [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `21.2.6` | `21.2.7` | | [@playwright/test](https://github.com/microsoft/playwright) | `1.58.2` | `1.59.1` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.5.0` | `25.5.2` | | [eslint](https://github.com/eslint/eslint) | `10.1.0` | `10.2.0` | | [typescript](https://github.com/microsoft/TypeScript) | `5.9.3` | `6.0.2` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.57.2` | `8.58.0` | Updates `@angular/animations` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/animations) Updates `@angular/cdk` from 21.2.4 to 21.2.5 - [Release notes](https://github.com/angular/components/releases) - [Changelog](https://github.com/angular/components/blob/main/CHANGELOG.md) - [Commits](angular/components@v21.2.4...v21.2.5) Updates `@angular/common` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/common) Updates `@angular/compiler` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/compiler) Updates `@angular/core` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/core) Updates `@angular/forms` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/forms) Updates `@angular/platform-browser` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/platform-browser) Updates `@angular/platform-browser-dynamic` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/platform-browser-dynamic) Updates `@angular/router` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/router) Updates `@angular/service-worker` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/service-worker) Updates `@embedpdf/pdfium` from 2.12.1 to 2.14.0 - [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases) - [Changelog](https://github.com/embedpdf/embed-pdf-viewer/blob/main/packages/pdfium/CHANGELOG.md) - [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.14.0/packages/pdfium) Updates `@embedpdf/snippet` from 2.12.1 to 2.14.0 Updates `@tanstack/angular-query-experimental` from 5.95.2 to 5.96.2 - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/angular-query-experimental@5.96.2/packages/angular-query-experimental) Updates `ng2-charts` from 8.0.0 to 10.0.0 - [Release notes](https://github.com/valor-software/ng2-charts/releases) - [Commits](valor-software/ng2-charts@v8.0.0...v10.0.0) Updates `ngx-extended-pdf-viewer` from 25.6.4 to 26.0.0 - [Release notes](https://github.com/stephanrauh/ngx-extended-pdf-viewer/releases) - [Commits](stephanrauh/ngx-extended-pdf-viewer@25.6.4...26.0.0) Updates `ngx-sse-client` from 20.0.1 to 21.0.0 - [Release notes](https://github.com/marcospds/ngx-sse-client/releases) - [Commits](marcospds/ngx-sse-client@v20.0.1...v21.0.0) Updates `primeng` from 21.1.3 to 21.1.5 - [Release notes](https://github.com/primefaces/primeng/releases) - [Changelog](https://github.com/primefaces/primeng/blob/master/CHANGELOG.md) - [Commits](https://github.com/primefaces/primeng/commits/21.1.5/packages/primeng) Updates `uuid` from 11.1.0 to 13.0.0 - [Release notes](https://github.com/uuidjs/uuid/releases) - [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md) - [Commits](uuidjs/uuid@v11.1.0...v13.0.0) Updates `@analogjs/vite-plugin-angular` from 2.3.1 to 2.4.0 - [Release notes](https://github.com/analogjs/analog/releases) - [Changelog](https://github.com/analogjs/analog/blob/beta/CHANGELOG.md) - [Commits](analogjs/analog@v2.3.1...v2.4.0) Updates `@analogjs/vitest-angular` from 2.3.1 to 2.4.0 - [Release notes](https://github.com/analogjs/analog/releases) - [Changelog](https://github.com/analogjs/analog/blob/beta/CHANGELOG.md) - [Commits](analogjs/analog@v2.3.1...v2.4.0) Updates `@angular-devkit/architect` from 0.2102.4 to 0.2102.6 - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular-cli/commits) Updates `@angular-devkit/schematics` from 21.2.4 to 21.2.6 - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@v21.2.4...v21.2.6) Updates `@angular/build` from 21.2.4 to 21.2.6 - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@v21.2.4...v21.2.6) Updates `@angular/cli` from 21.2.4 to 21.2.6 - [Release notes](https://github.com/angular/angular-cli/releases) - [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md) - [Commits](angular/angular-cli@v21.2.4...v21.2.6) Updates `@angular/compiler-cli` from 21.2.6 to 21.2.7 - [Release notes](https://github.com/angular/angular/releases) - [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/angular/angular/commits/v21.2.7/packages/compiler-cli) Updates `@playwright/test` from 1.58.2 to 1.59.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.58.2...v1.59.1) Updates `@types/node` from 25.5.0 to 25.5.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint` from 10.1.0 to 10.2.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.1.0...v10.2.0) Updates `typescript` from 5.9.3 to 6.0.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Commits](microsoft/TypeScript@v5.9.3...v6.0.2) Updates `typescript-eslint` from 8.57.2 to 8.58.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@angular/animations" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/cdk" dependency-version: 21.2.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/common" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/compiler" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/core" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/forms" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/platform-browser" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/platform-browser-dynamic" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/router" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/service-worker" dependency-version: 21.2.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@embedpdf/pdfium" dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: "@embedpdf/snippet" dependency-version: 2.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: "@tanstack/angular-query-experimental" dependency-version: 5.96.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: ng2-charts dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: npm-dependencies - dependency-name: ngx-extended-pdf-viewer dependency-version: 26.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: npm-dependencies - dependency-name: ngx-sse-client dependency-version: 21.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: npm-dependencies - dependency-name: primeng dependency-version: 21.1.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: uuid dependency-version: 13.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: npm-dependencies - dependency-name: "@analogjs/vite-plugin-angular" dependency-version: 2.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: "@analogjs/vitest-angular" dependency-version: 2.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: "@angular-devkit/architect" dependency-version: 0.2102.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular-devkit/schematics" dependency-version: 21.2.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/build" dependency-version: 21.2.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/cli" dependency-version: 21.2.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@angular/compiler-cli" dependency-version: 21.2.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: "@playwright/test" dependency-version: 1.59.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: "@types/node" dependency-version: 25.5.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-dependencies - dependency-name: eslint dependency-version: 10.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-dependencies - dependency-name: typescript dependency-version: 6.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: npm-dependencies - dependency-name: typescript-eslint dependency-version: 8.58.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> * fix(pdf): improve page change handling and add scroll margin to test setup * chore(dependencies): downgrade typescript to version 5.9.3 * fix(pdf): update authorization handling and adjust PDF buffer management --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
the book download proxy code path should never be called. this is because the book download URL received as part of the kobo proxy points at the Rakuten Kobo CDN rather than at grimmory. further, even if this code could download the file from the CDN (it doesn't), it would be pointless as we don't return it. instead of fixing the return this drops the proxy from that code path
* fix(api): invert kobo book type check for downloads with the previous organization of code paths this leads to an exception being raised in the logs even though the response message is fine * style: drop extra newline
📝 WalkthroughWalkthroughThis PR enhances API documentation by adding Swagger Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~15 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
… auth/task endpoints (#437) * docs(api): add OpenAPI tags and operation metadata to controllers * docs(api): normalize @operation annotation formatting in OpenAPI controllers * docs(api): align operationId values with existing controller method names * chore(api-docs): update api docs to be enabled by default for dev builds
…#372) * refactor(api): optimize caching mechanisms and improve book filtering logic * refactor(preferences): remove unused ExternalDocLinkComponent and enhance translate function typing * refactor(initializer): add Duration import for improved cache management * refactor(docker): increase MaxMetaspaceSize for improved memory management * refactor(repository): replace findAllForSummaryByIds with findAllById * refactor(cache): implement invalidateAppBooksQueries for improved cache management * refactor(AppBookService): increase default page size and optimize magic shelf book resolution * refactor(AppBookSpecification, MagicShelfBookService, TaskCancellationManager, magic-shelf-component): streamline join handling and improve memory management * refactor(AppBookService, MagicShelfBookService): enhance book retrieval logic and improve error handling * chore: fix formatting * chore: fix formatting
…and update related code (#334) * refactor(epub): migrate from documentnode to grimmory epub4j library and update related code * chore(deps): restore proper imports * refactor(epub): update to epub4j version 1.0.0 and improve cover image detection * fix(epub): validate spine indices in convertXPointerRangeToCfi method * chore(deps): update epub4j dependencies to version 1.0.1 * chore(deps): update epub4j dependency to version 1.0.1 * feat(build): enable preview features and update epub4j dependencies in build configuration * feat(epub): update epub4j dependencies to version 1.1.0 and refactor resource handling for improved streaming
…g and low priority fetch (#431) * fix(lazy-loading): improve image loading performance with lazy loading and low priority fetch * fix(styles): update intrinsic size for virtual scroller items to use CSS variable * refactor(book-card): simplify redundant cover width binding Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: Zach <zachyale@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…uses and file types (#448) * fix(filter): update filter options to use CountedOption for read statuses and file types * fix(specification): validate file types and read statuses, throwing APIException for invalid values
… in infinite scrolling (#433) * fix(reader): optimize memory management for canvas and image handling in infinite scrolling * fix(reader): improve image loading management and optimize memory usage in infinite scrolling
…bookReaderComponent (#435)
* fix(dashboard): improve performance with OnPush change detection * fix(dashboard): refactor book card component for improved readability and performance * fix(tests): mock matchMedia for improved test compatibility * fix(tests): matchMedia mock for better CI compatibility and support * fix(dashboard): add clearAll method to BookBrowserScrollService and update tests * fix(dashboard): improve performance with content visibility and refactor styles * fix(dashboard): improve scroll performance with estimated total height and refactor layout * fix(tests): add mock for getCurrentUser in userService for improved test coverage * fix(dashboard): implement infinite scroll for book loading and scroll restoration * fix(tests): fix lint error * fix(tests): mock ResizeObserver and IntersectionObserver * fix(tests): mock ResizeObserver and IntersectionObserver (again) * fix(dashboard): improve accessibility and performance by updating aria attributes and optimizing animations * fix(dashboard): improve submenu accessibility and optimize virtual scroller performance * fix(dashboard): clean up imports and improve component structure * fix(dashboard): correct mobile check in author browser component * fix(dashboard): add OnDestroy lifecycle hook to BookBrowserComponent
… for better resource management (#443) * refactor(settings): replace unsubscribe logic with takeUntilDestroyed for better resource management * refactor(settings): streamline saveSettings method and improve error handling * fix(settings): improve error handling in saveSetting method * refactor(settings): update tab structure * refactor(settings): implement OnDestroy interface and clean up unused destroyRef instances
…ures (#463) * fix(reader): resolve epub preview runtime and audiobook download failures * fix(files): load book library path for additional file downloads * fix(files): scope additional file operations to book-owned non-primary files
* fix(pdf-reader): localize embedpdf viewer to active app language * fix(pdf-reader): use runtime locale fallback for embedpdf translations * fix(pdf-reader): clarify document viewer save info copy
# Conflicts: # booklore-api/src/main/java/org/booklore/app/controller/AppBookController.java # booklore-api/src/main/java/org/booklore/controller/AdditionalFileController.java
558f0af to
1ac904a
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
booklore-api/src/main/java/org/booklore/controller/UserStatsController.java (1)
253-253: Consider adding lower bounds for window-size params (weeks,months).Line 253 and Line 276 currently allow
0/negative values. Adding@Min(1)keeps these endpoints consistent with the new month/week validation approach.Suggested diff
- public ResponseEntity<List<WeeklyListeningTrendResponse>> getWeeklyListeningTrend( - `@Parameter`(description = "Number of weeks") `@RequestParam`(defaultValue = "26") int weeks) { + public ResponseEntity<List<WeeklyListeningTrendResponse>> getWeeklyListeningTrend( + `@Parameter`(description = "Number of weeks") `@RequestParam`(defaultValue = "26") `@Min`(1) int weeks) { return ResponseEntity.ok(readingSessionService.getWeeklyListeningTrend(weeks)); } @@ - public ResponseEntity<List<MonthlyPaceResponse>> getMonthlyListeningPace( - `@Parameter`(description = "Number of months") `@RequestParam`(defaultValue = "12") int months) { + public ResponseEntity<List<MonthlyPaceResponse>> getMonthlyListeningPace( + `@Parameter`(description = "Number of months") `@RequestParam`(defaultValue = "12") `@Min`(1) int months) { return ResponseEntity.ok(readingSessionService.getMonthlyListeningPace(months)); }Also applies to: 276-276
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@booklore-api/src/main/java/org/booklore/controller/UserStatsController.java` at line 253, The weeks/months request parameters in UserStatsController are currently unconstrained and can be zero/negative; annotate the parameters (the `@RequestParam` int weeks and the `@RequestParam` int months in the controller methods) with javax.validation.constraints.Min(1) to enforce a lower bound (e.g., `@Min`(1) `@RequestParam`(defaultValue="26") int weeks), add the necessary import, and ensure the controller (UserStatsController) or the specific handler methods are covered by Spring validation by adding `@Validated` on the class or method if not already present so the `@Min` constraint is enforced at runtime.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@booklore-api/src/main/java/org/booklore/controller/UserStatsController.java`:
- Line 253: The weeks/months request parameters in UserStatsController are
currently unconstrained and can be zero/negative; annotate the parameters (the
`@RequestParam` int weeks and the `@RequestParam` int months in the controller
methods) with javax.validation.constraints.Min(1) to enforce a lower bound
(e.g., `@Min`(1) `@RequestParam`(defaultValue="26") int weeks), add the necessary
import, and ensure the controller (UserStatsController) or the specific handler
methods are covered by Spring validation by adding `@Validated` on the class or
method if not already present so the `@Min` constraint is enforced at runtime.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 8cf239f1-3f81-42c0-a3e2-c0eb4b544a95
📒 Files selected for processing (13)
booklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.javabooklore-api/src/main/java/org/booklore/app/controller/AppBookController.javabooklore-api/src/main/java/org/booklore/app/controller/AppFilterController.javabooklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.javabooklore-api/src/main/java/org/booklore/app/controller/AppSeriesController.javabooklore-api/src/main/java/org/booklore/app/controller/AppShelfController.javabooklore-api/src/main/java/org/booklore/controller/AdditionalFileController.javabooklore-api/src/main/java/org/booklore/controller/LogoutController.javabooklore-api/src/main/java/org/booklore/controller/OidcAuthController.javabooklore-api/src/main/java/org/booklore/controller/OidcGroupMappingController.javabooklore-api/src/main/java/org/booklore/controller/ReadingSessionController.javabooklore-api/src/main/java/org/booklore/controller/TaskController.javabooklore-api/src/main/java/org/booklore/controller/UserStatsController.java
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Test Suite / Backend Tests
- GitHub Check: Test Suite / Frontend Tests
- GitHub Check: Analyze (java-kotlin)
🧰 Additional context used
📓 Path-based instructions (1)
booklore-api/src/**/*.java
📄 CodeRabbit inference engine (AGENTS.md)
booklore-api/src/**/*.java: Use 4-space indentation in Java files and match surrounding Java style
Prefer constructor injection via Lombok patterns already used in the codebase. Do not introduce@Autowiredfield injection
Use MapStruct for entity/DTO mapping
Files:
booklore-api/src/main/java/org/booklore/app/controller/AppShelfController.javabooklore-api/src/main/java/org/booklore/controller/ReadingSessionController.javabooklore-api/src/main/java/org/booklore/controller/LogoutController.javabooklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.javabooklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.javabooklore-api/src/main/java/org/booklore/controller/OidcAuthController.javabooklore-api/src/main/java/org/booklore/app/controller/AppSeriesController.javabooklore-api/src/main/java/org/booklore/controller/OidcGroupMappingController.javabooklore-api/src/main/java/org/booklore/app/controller/AppFilterController.javabooklore-api/src/main/java/org/booklore/app/controller/AppBookController.javabooklore-api/src/main/java/org/booklore/controller/TaskController.javabooklore-api/src/main/java/org/booklore/controller/UserStatsController.javabooklore-api/src/main/java/org/booklore/controller/AdditionalFileController.java
🧠 Learnings (5)
📚 Learning: 2026-04-04T15:36:56.558Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 372
File: booklore-api/src/main/java/org/booklore/app/service/AppBookService.java:357-359
Timestamp: 2026-04-04T15:36:56.558Z
Learning: In `booklore-api/src/main/java/org/booklore/app/service/AppBookService.java`, `shelfId` and `magicShelfId` are mutually exclusive navigation contexts in `getFilterOptions`. A request will never supply both at the same time, so the `else if (shelfId != null)` branch after the `magicBookIds != null` check is intentional and correct — there is no missing shelf-∩-magicShelf intersection case. Do not flag this pattern as a bug.
Applied to files:
booklore-api/src/main/java/org/booklore/app/controller/AppShelfController.javabooklore-api/src/main/java/org/booklore/app/controller/AppFilterController.java
📚 Learning: 2026-04-10T08:15:37.436Z
Learnt from: imnotjames
Repo: grimmory-tools/grimmory PR: 449
File: booklore-api/src/main/java/org/booklore/service/book/BookDownloadService.java:139-145
Timestamp: 2026-04-10T08:15:37.436Z
Learning: When using Spring `ContentDisposition.builder(...).filename(name, StandardCharsets.UTF_8).build()` (i.e., explicitly providing UTF-8), the resulting header value should include both the quoted `filename="=?UTF-8?..."` and the RFC 5987 `filename*=` parameters. In this case, any extra ASCII fallback computation (e.g., deriving an ASCII `fallbackFilename` via `NON_ASCII_PATTERN` and calling `.filename(fallbackFilename)`) is likely redundant—prefer calling only `.filename(fallbackName?, StandardCharsets.UTF_8)` as appropriate and let Spring handle the UTF-8 header parameters. Verify by comparing the emitted header for `filename` and `filename*` before deciding to keep an ASCII fallback.
Applied to files:
booklore-api/src/main/java/org/booklore/app/controller/AppShelfController.javabooklore-api/src/main/java/org/booklore/controller/ReadingSessionController.javabooklore-api/src/main/java/org/booklore/controller/LogoutController.javabooklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.javabooklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.javabooklore-api/src/main/java/org/booklore/controller/OidcAuthController.javabooklore-api/src/main/java/org/booklore/app/controller/AppSeriesController.javabooklore-api/src/main/java/org/booklore/controller/OidcGroupMappingController.javabooklore-api/src/main/java/org/booklore/app/controller/AppFilterController.javabooklore-api/src/main/java/org/booklore/app/controller/AppBookController.javabooklore-api/src/main/java/org/booklore/controller/TaskController.javabooklore-api/src/main/java/org/booklore/controller/UserStatsController.javabooklore-api/src/main/java/org/booklore/controller/AdditionalFileController.java
📚 Learning: 2026-03-26T01:46:48.863Z
Learnt from: CR
Repo: grimmory-tools/grimmory PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-26T01:46:48.863Z
Learning: Applies to booklore-api/src/**/*.java : Prefer constructor injection via Lombok patterns already used in the codebase. Do not introduce `Autowired` field injection
Applied to files:
booklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.javabooklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.javabooklore-api/src/main/java/org/booklore/app/controller/AppBookController.java
📚 Learning: 2026-03-26T02:20:27.862Z
Learnt from: imnotjames
Repo: grimmory-tools/grimmory PR: 198
File: booklore-api/src/main/java/org/booklore/controller/KoboController.java:100-103
Timestamp: 2026-03-26T02:20:27.862Z
Learning: In `booklore-api/src/main/java/org/booklore/controller/KoboController.java`, the Kobo reader device already makes direct outbound connections to Kobo's CDN/servers for other requests (confirmed by imnotjames via testing). Therefore, returning a `307 TEMPORARY_REDIRECT` to `cdn.kobo.com` for non-`BL-` book cover thumbnails (instead of server-side proxying) does NOT introduce a new privacy or behavioral regression — the Kobo device's IP and User-Agent are already exposed to Kobo through other direct requests.
Applied to files:
booklore-api/src/main/java/org/booklore/controller/OidcAuthController.java
📚 Learning: 2026-03-26T01:46:48.863Z
Learnt from: CR
Repo: grimmory-tools/grimmory PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-26T01:46:48.863Z
Learning: Applies to booklore-api/src/**/*.java : Use MapStruct for entity/DTO mapping
Applied to files:
booklore-api/src/main/java/org/booklore/app/controller/AppBookController.java
🔀 Multi-repo context grimmory-tools/grimmory-docs
Findings for grimmory-tools/grimmory-docs [::grimmory-tools/grimmory-docs::]
- docs/integration/komga-api.md — multiple Komga API endpoints reference {libraryId} and {bookId} (lines shown by search: ~237–257, 278). These are documentation pages that reference path/query parameter names used in Booklore controllers. [::grimmory-tools/grimmory-docs::]
- docs/integration/opds.md — entries refer to GET /komga/api/v1/books/{id}/file and related book endpoints (lines shown ~141–144). [::grimmory-tools/grimmory-docs::]
- docs/authentication/oidc-settings.md and related auth docs — contain sections on OIDC/back-channel logout and group-mapping (many lines; see search hits). These may be affected in OpenAPI output for OIDC endpoints annotated in the PR. [::grimmory-tools/grimmory-docs::]
- docs/authors.md, docs/series.md, docs/notebook.md, docs/notebook.md, docs/readers/, docs/library/ — general product docs referencing authors/books/series/shelves and pagination/filters (search hits for page/size/libraryId/bookId-like terms across many docs). These are static docs that might need syncing if the project regenerates or publishes updated OpenAPI-driven API docs. [::grimmory-tools/grimmory-docs::]
Assessment
- I found documentation pages that reference the same parameter names and endpoints the PR annotates for OpenAPI. No Java code consumers live here (this repo holds user/docs); the main impact is that API docs generation or published OpenAPI spec used by these docs may change/enrich parameter descriptions. [::grimmory-tools/grimmory-docs::]
🔇 Additional comments (13)
booklore-api/src/main/java/org/booklore/controller/ReadingSessionController.java (1)
7-7: OpenAPI parameter docs were added cleanly without behavior changes.
@Parametermetadata is aligned with existing@PathVariable/@RequestParambindings and keeps runtime behavior intact.Also applies to: 48-50
booklore-api/src/main/java/org/booklore/app/controller/AppAuthorController.java (1)
4-4: Parameter descriptions are consistent and useful for API consumers.Nice improvement to OpenAPI clarity for pagination/filtering and path params, with no change to endpoint behavior.
Also applies to: 29-35, 47-47
booklore-api/src/main/java/org/booklore/app/controller/AppShelfController.java (1)
4-4: Good OpenAPI coverage for magic-shelf paging inputs.The added
@Parameterannotations improve generated docs while preserving current request binding/defaults.Also applies to: 104-106
booklore-api/src/main/java/org/booklore/app/controller/AppNotebookController.java (1)
4-4: Strong documentation pass across notebook endpoints.Path/query parameter descriptions are now consistently documented across browse/update/delete routes.
Also applies to: 33-35, 47-52, 64-65, 78-79
booklore-api/src/main/java/org/booklore/controller/LogoutController.java (1)
4-4: Nice improvement documenting the optionalOriginheader.This makes the logout contract clearer in OpenAPI without affecting request handling.
Also applies to: 34-34
booklore-api/src/main/java/org/booklore/app/controller/AppSeriesController.java (1)
4-4: Series endpoint parameter docs look good and consistent.The added descriptions improve discoverability for filtering/sorting/pagination inputs.
Also applies to: 29-35, 52-57
booklore-api/src/main/java/org/booklore/controller/OidcAuthController.java (1)
4-4: OIDC parameter documentation updates are solid.Good addition of descriptions for callback and logout inputs; this improves API clarity without touching flow logic.
Also applies to: 82-87, 133-137, 155-155
booklore-api/src/main/java/org/booklore/controller/OidcGroupMappingController.java (1)
4-4:Mapping IDparameter documentation is correctly applied.Both update and delete endpoints now expose clearer path-parameter docs in OpenAPI.
Also applies to: 50-50, 60-60
booklore-api/src/main/java/org/booklore/app/controller/AppBookController.java (1)
41-41: Clean OpenAPI parameter enrichment with no behavioral drift.These
@Parameter(description = ...)additions are consistent and keep request binding/runtime logic intact.Also applies to: 53-55, 67-67, 79-79, 91-91, 103-103, 115-115, 129-129, 143-145
booklore-api/src/main/java/org/booklore/app/controller/AppFilterController.java (1)
30-32: Looks good — parameter docs are clear and aligned with endpoint inputs.booklore-api/src/main/java/org/booklore/controller/TaskController.java (1)
70-70: Good annotation-only update on task route parameters.No functional behavior appears altered; this improves OpenAPI clarity for both endpoints.
Also applies to: 94-94
booklore-api/src/main/java/org/booklore/controller/UserStatsController.java (1)
22-22: Nice validation hardening.Adding
@Validatedplus explicit month/week bounds is a solid improvement for request correctness and error consistency.Also applies to: 50-50, 65-65, 91-91, 105-105, 241-241, 300-300
booklore-api/src/main/java/org/booklore/controller/AdditionalFileController.java (1)
41-41: Looks good — parameter descriptions are consistently applied across file endpoints.Also applies to: 54-55, 69-73, 86-87, 100-101, 115-116
0bf513c to
62434c5
Compare
Description
Continues the work of improving API controller annotations.
Linked Issue: Loosely associated with #183
Changes
Summary by CodeRabbit