mirror of
https://github.com/adityachandelgit/BookLore.git
synced 2026-02-18 03:07:40 +01:00
* refactor(book): extract file-specific information from book First commit in a series aimed at refactoring the data model for books. More specifically, the idea is to extract all file-specific information from the `book` table and move it to the `book_file` table, previously named `book_additional_file` The aim is to make it easier to: * Improve support for books with multiple file formats (PDF, EPUB, etc) for all interactions (Read, Download, etc) * Support for merging/unmerging books * Add support for additional file types * Specify preferred formats at the user level Ref: #489 * refactor(book): ensure the API build and runs Further work on the refactoring aimed at separating file-related details from the `book` table. With this commit all the missing changes that were prventing the API to build or to book have been addressed. TODO: test extensively, adjust existing unit tests and add new ones * fix(read): add mapping for book format This restores the read functionality which relies on the book format field to decide which reader to use. * fix: fix read, dowload and file upload This commit fixes multiple issues either caused by the refactoring or pre-existing: * Fix the Read button behaviour after the refactoring * Unregister the watcher process when uploading additional formats * Fix downloading of additional book formats (using the wrong ID) * fix: adjust tests to use the new BookFileEntity class All the tests that used to fecth file information from BookEntity now need to get them from the relevant BookFileEntity * fix: do not rely on AdditionalFileType * Use the BookFileEntity bookFormat instead * fix: use the relevant BookFileEntity class * fix: call the right methods * fix: Add missing mapping for the test * fix: adapt the test to the new semantics All book files, including the primary one, are treated as equal now. The tests needs to take that into account when checking for additional formats. * fix: use mutable lists * fix: fix syntax for droppung unique constraint MariaDB uses indexes, not constraints * fix: regression on book file ordering We want to make this refactoring 100% compatible with the current behaviour (modulo a few bugs), therefore we need to maintain the right order to ensure the "primary" book stays the same after the migration. * fix: allow download of supplementary files * fix(opds): replace removed additionalFiles entity graph with bookFiles - Update BookOpdsRepository @EntityGraph paths to use BookEntity.bookFiles after the refactor - Add @DataJpaTest to validate BookOpdsRepository wiring and catch invalid EntityGraph attributes - Add H2 as testRuntimeOnly dependency so the JPA slice test can run with an embedded DB * chore(bookdrop): mount bookdrop folder from a local directory It's consistent with the library dir, and makes debugging easier when working on the local environment * fix: rename migration after rebase It's no longer 66, bumped to 73 * fix: handle BookEntity primary file NPEs after rebase Adjust tests to always instanciate BookFileEntity when manipulating BookEntity. * chore: rename migration to avoid conflict V73 is already taken on develop, V67 was left "unused" * chore: rename again to ensure it's applied * fix: make sure to flush the data to DB Without the flush there is a high chance of leaving the DB in an inconsistent state after a book move. * fix: move all files belonging to a book This fixes a pre-existing bug which has some nasty ramifications. We never moved "additional files" when changing library for a book entity, causing them to become effectively "unreacheable" from the UI. * fix(migration): remove the unique index before importing data * fix: fix build and test after rebase * fix(migration): drop legacy table * fix(upload): use the templetized name when storing on DB * fix(rebase): Add logical fixes post rebase * Adapt the code to properly handle the new `archive_type` field and logic * Bump the version number for the DB migration * Use `getPrimaryBookFile()` whenever trying to access book files * fix(migration): Handle additional book formats * Add support for FB2 files * Corretly handle cb7 files as CBX * fix(file mover): fix a regression when moving books across categories The previous approach would trigger the JPA's `orphanRemoval` parameter on the bookEntities, effetively triggering a delete on the DB. This caused files to be moved but the data on the DB would get stale, also causing additional formats to be treated as separate books upon a rescan. * fix(rescan): do not delete alternative files on rescan Upon library rescan, additional files such as images were removed from book entities association when using the "Each file is a book" library structure.
67 lines
2.1 KiB
YAML
67 lines
2.1 KiB
YAML
services:
|
|
backend:
|
|
image: gradle:8-jdk21-alpine
|
|
command: sh -c "cd /booklore-api && ./gradlew bootRun"
|
|
ports:
|
|
- "${BACKEND_PORT:-8080}:8080"
|
|
- "${REMOTE_DEBUG_PORT:-5005}:5005"
|
|
environment:
|
|
- DATABASE_URL=jdbc:mariadb://backend_db:3306/booklore
|
|
- DATABASE_USERNAME=booklore
|
|
- DATABASE_PASSWORD=booklore
|
|
- REMOTE_DEBUG_ENABLED=true
|
|
stdin_open: true
|
|
tty: true
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- backend_db
|
|
volumes:
|
|
- './booklore-api:/booklore-api'
|
|
- ./shared/data:/app/data
|
|
- ./shared/books:/books
|
|
- ./shared/bookdrop:/bookdrop
|
|
|
|
backend_db:
|
|
image: mariadb:11.4
|
|
container_name: backend_db
|
|
volumes:
|
|
- backend_db:/var/lib/mysql
|
|
restart: unless-stopped
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=booklore
|
|
- MYSQL_DATABASE=booklore
|
|
- MYSQL_USER=booklore
|
|
- MYSQL_PASSWORD=booklore
|
|
ports:
|
|
- "${DB_PORT:-3366}:3306"
|
|
healthcheck:
|
|
test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-pbooklore" ]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
ui:
|
|
image: node:22-alpine
|
|
command: sh -c "cd /angular-app && npm install -g @angular/cli --force && npm install --force && ng serve --host 0.0.0.0"
|
|
environment:
|
|
- NODE_ENV=development
|
|
stdin_open: true
|
|
tty: true
|
|
restart: unless-stopped
|
|
volumes:
|
|
- './booklore-ui:/angular-app'
|
|
|
|
# you can have node_modules in a volume. however, if you enable this, expect trouble in some IDEs, as the deps are not available anymore
|
|
# - node_modules:/angular-app/node_modules
|
|
|
|
# we ignore package-lock otherwise will throw
|
|
# An unhandled exception occurred: Cannot find module @rollup/rollup-linux-x64-musl. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828).
|
|
# Please try `npm i` again after removing both package-lock.json and node_modules directory.
|
|
- '/dev/null:/angular-app/package-lock.json'
|
|
ports:
|
|
- "${FRONTEND_PORT:-4200}:4200"
|
|
|
|
volumes:
|
|
node_modules:
|
|
backend_db:
|