feat(book-requests): add automated request fulfillment

Let users request books, route approvals, search configured sources, and import fulfilled releases through the Book Dock. Include scoped permissions, automation, download-client integrations, plugin support, requester visibility, and one consolidated schema migration.

Closes #248
Ref #1115
This commit is contained in:
neon
2026-08-31 16:33:40 +00:00
parent 0f5429131a
commit fc6e6f03d5
443 changed files with 87915 additions and 1730 deletions
+25
View File
@@ -285,6 +285,31 @@ export const E2E_SUITES = Object.freeze({
...SHARED_DB_AND_HELPER_PATHS,
],
},
"book-requests": {
id: "book-requests",
name: "Book Requests",
timeout: 90,
lane: "full",
description: "Book request lifecycle, dedupe, ownership, and plugin-route authorization suite",
vitestTarget: "test/book-requests.e2e-spec.ts",
junitOutput: `${TEST_RESULTS_DIR}/book-requests-e2e-junit.xml`,
prepareDedicatedDatabase: true,
useDedicatedDatabase: true,
changedPaths: [
"server/src/modules/book-request/**",
"server/src/modules/book-dock/**",
"server/src/modules/library/**",
"server/test/book-requests.e2e-spec.ts",
"server/test/e2e/authorization-matrix/**",
".github/workflows/e2e-runner.yml",
"packages/types/src/book-request.ts",
"packages/types/src/book-request-automation.ts",
"packages/types/src/book-request-destination.ts",
"packages/types/src/indexer.ts",
"packages/types/src/download-client.ts",
...SHARED_DB_AND_HELPER_PATHS,
],
},
"series-next-book": {
id: "series-next-book",
name: "Series Next Book",