3.3 KiB
3.3 KiB
Novela 2.0 - Technical Plan
Scope
Dit document beschrijft de technische uitvoering van de blauwdruk in implementeerbare stappen.
Architectural Rules
- Bestand is source of truth.
- Database is snelle index.
- Schrijfacties: eerst bestand, dan DB.
- Lezen: primair uit DB, met scan/rescan voor recovery.
Data Integrity Rules
- Alle child-tabellen refereren
library(filename)metON DELETE CASCADE. - Verwijderen van een boek is een enkel
DELETE FROM libraryna file-delete. - Rename-flow moet
filenamesynchroon aanpassen in:librarybook_tagsreading_progressreading_sessionslibrary_cover_cache
Runtime Lifecycle
- Startup:
init_pool()run_migrations()- routers mounten
- Shutdown:
close_pool()
Module Responsibilities
db.py: pool ownership + connection helpers.migrations.py: schema + seeds.routers/library.py: import/scan/delete/cover/home/stats.routers/reader.py: lezen + progress + metadata patch + epub editor endpoints.routers/editor.py: uiteindelijke dedicated editor routes (kan initieel delegaten).routers/grabber.py: scraper orchestration + credentials + SSE.routers/backup.py: Dropbox sync + pg dump + logging.routers/settings.py: break patterns + cleaning endpoints.
Endpoint Contract Notes
- Alle file routes gebruiken veilige path-resolutie tegen traversal.
- Cover endpoint gedrag:
- cached eerst
- fallback raw extract
- anders 404
- Progress payload:
- EPUB:
{ cfi, progress } - PDF/CBR:
{ page, progress }
- EPUB:
Backup Plan
POST /api/backup/run:- insert
runninginbackup_log - sync files naar Dropbox (incremental op mtime+size)
- draai
pg_dumpen upload.sql - update
backup_lognaarsuccess/error
- insert
- OAuth token opslag via
credentials(site='dropbox') en encrypted-at-rest (Fernet) in de database. - Beheer via webinterface op
/credentials-manager(site:dropbox, token in password veld). - Legacy plaintext credentials worden automatisch gemigreerd naar encrypted bij uitlezen.
Migration Plan from Current State
- Behoud v1 stabiele modules (
epub.py,xhtml.py, scrapers, templates/static). - Introduceer nieuwe routers zonder bestaande frontend te breken (compat routes waar nodig).
- Schakel library root om naar
library/. - Activeer PDF/CBR scan en reader paden.
- Split editor-routes uit reader naar dedicated
editor.py. - Volledige scrape->epub flow migreren naar
grabber.py. - Backup volledig afronden (Dropbox + pg_dump).
Test Matrix
- Import:
- EPUB met/zonder cover
- PDF 1+ pagina
- CBR/CBZ met images
- Reader:
- EPUB CFI save/load
- PDF page render + page progress
- CBR page render + page progress
- Metadata edit:
- rename path
- db references geupdate
- old row cleanup
- Delete:
- file weg
- lege dirs gepruned
- cascade records weg
- Break patterns:
- create/update/delete/enable
- Grabber:
- preload/debug
- convert job events
- Backup:
- status/history
- success/error logging
Deployment Notes
- Docker image bouwt vanuit
containers/novela. - Stack uit
stack/stack.ymlmet env uitstack/novela.env. NOVELA_MASTER_KEYis verplicht voor encrypt/decrypt van credentials in de database en moet stabiel blijven na initiele ingebruikname.- Postgres volume persistent.
- Library mount persistent.