* feat: support Douban as metadata provider.
Douban.com is a platform of sharing films, music and books in China.
* format code
* support douban reviews
---------
Co-authored-by: Aditya Chandel <8075870+adityachandelgit@users.noreply.github.com>
* test: add content-type assertion for user auth
* fix: specify JSON content type in authorizeUser method
Set content type to JSON for user authorization response.
* build(docker): skip test during docker build
* build(gha): do test directly on GHA instead of docker build
* build(gha): publish test results
* build(gha): publish docker build to personal docker hub and GH registry
* feat(api/model): add new entity BookAdditionalFileEntity
* feat(api/db): add book additional file repository
* feat(api/db): add migration
* test(api/db): add book additional file repository test
* test(api/db): add book additional file repository tests for hash uniqueness
* feat(api/domain): add support to additional file model
* feat(api): add additional files controller
* refactor(api): move addAdditionalFile to FileUploadService as uploadAdditionalFile method
* feat(service): search book by additional file
* feat(services): process deleted additional files with ability to promote alternative formats to book instead of deleting them
* refactor(util): use common code to resolve patter for entity and domain object
* feat(service): move additional files
* test(service): test move additional files along with book itself
* feat(ui/domain): add alternativeFormats and supplementaryFiles to book model
* feat(ui/domain): add download additional file method to book service
* refactor(api/domain): extract FileInfo interface with common fields
Allow to share the same interface thet is implemented by AdditionFile and Book
* feat(ui): show multiple download options
* feat(ui/domain): add delete additional file method to book service
* feat(ui): add delete additional file ui
* feat(ui): add additional-file-uploader.component
* feat(ui/domain): add uploadAdditionalFile to the service
* feat(ui): add Upload File menu item
* feat(ui): show supplementary files in download menu item
* feat(ui): show supplementary files in delete file menu item
* feat(ui): book card allow to select single file to download or delete
* feat(api/domain): add scan mode and default book format to the library
* feat(ui): select scan mode and default book format
* feat(api): create/update library settings
* refactor(services): get processor based on scan mode
* feat(services): read all files if processor supports supplimentary files
* fix(services): detectNewBookPaths should check additional files as well
* feat(services): implement folder as book file processor
* test(service): add tests for FolderAsBookFileProcessor
* feat(services): allow follow links for search library files
* test(library): add tests for folder as book file processor
* refactor(library): use Path instead of String for directory path
* feat(library): sort directories before processing
* feat(library): reuse library file book type
* fix(library): do not add additional format if it is used in another book
* test(library): test same hashes files
* refactor(library): simplify FolderAsBookFileProcessor
* test(library): add test with deep folder structure
* test(library): add additional files to existing book
---------
Co-authored-by: Aditya Chandel <8075870+adityachandelgit@users.noreply.github.com>
* feat(api/model): add new entity BookAdditionalFileEntity
* feat(api/db): add book additional file repository
* feat(api/db): add migration
* test(api/db): add book additional file repository test
* test(api/db): add book additional file repository tests for hash uniqueness
* feat(api/domain): add support to additional file model
* feat(api): add additional files controller
* refactor(api): move addAdditionalFile to FileUploadService as uploadAdditionalFile method
* feat(service): search book by additional file
* feat(services): process deleted additional files with ability to promote alternative formats to book instead of deleting them
* refactor(util): use common code to resolve patter for entity and domain object
* feat(service): move additional files
* test(service): test move additional files along with book itself
* feat(ui/domain): add alternativeFormats and supplementaryFiles to book model
* feat(ui/domain): add download additional file method to book service
* refactor(api/domain): extract FileInfo interface with common fields
Allow to share the same interface thet is implemented by AdditionFile and Book
* feat(ui): show multiple download options
* feat(ui/domain): add delete additional file method to book service
* feat(ui): add delete additional file ui
* feat(ui): add additional-file-uploader.component
* feat(ui/domain): add uploadAdditionalFile to the service
* feat(ui): add Upload File menu item
* feat(ui): show supplementary files in download menu item
* feat(ui): show supplementary files in delete file menu item
* feat(ui): book card allow to select single file to download or delete
* feat(api/model): add new entity BookAdditionalFileEntity
* feat(api/db): add book additional file repository
* feat(api/db): add migration
* test(api/db): add book additional file repository test
* test(api/db): add book additional file repository tests for hash uniqueness
* feat(api/domain): add support to additional file model
* feat(api): add additional files controller
* refactor(api): move addAdditionalFile to FileUploadService as uploadAdditionalFile method
* feat(service): search book by additional file
* feat(services): process deleted additional files with ability to promote alternative formats to book instead of deleting them
* refactor(util): use common code to resolve patter for entity and domain object
* feat(service): move additional files
* test(service): test move additional files along with book itself