Architectuur
Gevorderd
Zoek waar code staat en welke regels gelden voordat je iets groots wijzigt.
Kort samengevat
Link naar Kort samengevatHolyArrs is één Go-programma met de web-app ingebouwd. Het serveert de web-app en een JSON-API op poort 6262 en bewaart zijn data in 2 SQLite-bestanden in de configuratiemap. Het roept downloaders, bronnen (via Jackett of Prowlarr), mediaservers, meldingskanalen en de HolyArrs-metadataserver aan.
Volg één aanvraag. Iemand vraagt op Ontdekken een film aan.
requestslegt de aanvraag vast.- Na goedkeuring vraagt
moviesaansourcesom releases. - De keuzeregels in
mediafilesgeven ze een score. downloadsstuurt de beste naar de downloader.- Als die klaar is, importeert
mediafileshet bestand. mediaserversenalertskrijgen bericht.
Codekaart
Link naar Codekaartapp/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins themapp/backend/internal/<module>/ one flat folder per moduleapp/backend/internal/core/ plumbing every module may useapp/backend/tools/ dev-only programsapp/frontend/ the SvelteKit web app; embed.go bundles its buildapp/frontend/src/routes/<page>/ thin pages that combine module partsapp/frontend/src/lib/<module>/ each module's web codeapp/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing elseapp/frontend/src/lib/core/ server client, app state, helpersapp/tests/ end-to-end tests (Playwright)deploy/ the Dockerfile and release scriptsdocs/ guides and these pagesgo.mod staat in de hoofdmap van de repo, omdat go:embed niet bij een bovenliggende map kan.
Waar vind je wat
Link naar Waar vind je wat| Je wilt wijzigen | Kijk in |
|---|---|
| Hoe een release wordt gekozen | internal/mediafiles |
| Een downloaderclient | internal/downloads, contracttests in internal/downloads/conformance_test.go |
| Een meldingskanaal | internal/alerts |
| Aanmelden, gebruikers, API-sleutels | internal/accounts |
| De wizard voor de eerste start | internal/setup, app/frontend/src/routes/welcome |
| Een klaar bestand importeren (uitpakken, tags, koppelen aan een titel) | internal/importer |
| Bibliotheekmappen, overnemen en hernoemen | internal/library |
| Hoe rijen en planken worden gekozen en geordend | internal/suggest |
| Welke onderdelen van de app aanstaan | internal/core/parts |
| Het adres van een pagina | app/frontend/src/routes/ |
| Een migratie | internal/core/database/migrations/ |
| De Docker-image | deploy/Dockerfile |
De regels
Link naar De regelsControles in app/backend/tools/structurecheck laten de build mislukken als er een regel wordt overtreden. Voer ze uit met de regel in Testen.
- Laagvolgorde. Een module importeert alleen modules op een lagere laag, en alleen hun hoofdpakket. Modules op dezelfde laag importeren elkaar nooit.
- Omhoog aanroepen. Heeft een lagere module iets nodig van een hogere, dan geeft de hogere gewone data door naar beneden, of de lagere definieert een kleine interface die
wiring.goinvult. - SQL blijft thuis. Alleen de eigen
store*.go-bestanden van een module bevatten SQL, en alleen voor de eigen tabellen. Wil je rijen van een andere module lezen, roep dan de service van die module aan. - Gedeelde tabellen horen bij core. Gebruik
settings,schedules,secrets,jobseneventsvia de hulpfuncties van core. - Eén weg naar buiten. Elke aanroep naar buiten gaat via
core/outbound. - Uitgestelde functies registreren een schakelaar bij
core/startup. Staat die uit, dan bestaat de route niet en verbergt de pagina de functie. - Geen verzamelpakketten. Geen
util,common,sharedofhelpers.
De laagvolgorde staat in Modules.
Voor gevorderden
Link naar Voor gevorderdenIn een module
Elke backendmodule gebruikt dezelfde bestandsnamen.
| Bestand | Bevat |
|---|---|
routes.go |
API-routes, elk met het recht dat het nodig heeft |
service.go en onderwerpbestanden |
Logica die andere modules aanroepen |
store.go, store_<topic>.go |
Alle SQL voor de eigen tabellen van de module |
types.go |
De records van de module |
Aan de webkant bevat lib/<module>/ een index.ts (wat andere modules mogen gebruiken), de Svelte-onderdelen met hun tests, en api.ts en state.svelte.ts alleen als de module eigen aanroepen of een eigen status heeft.
Core-pakketten
Core is de onderliggende infrastructuur. Het bevat geen productregels en importeert geen module.
| Pakket | Bevat |
|---|---|
core/database |
Beide SQLite-bestanden openen en migreren, queryhulpjes, hulpjes voor instellingen en gebeurtenissen, gedeelde rijvelden, geschiedenis opschonen |
core/files |
Hulpjes voor bestanden en mappen, vrije schijfruimte |
core/releasename |
Kwaliteit, groep en afleveringsnummers uit de naam van een release |
core/outbound |
De enige weg om externe servers aan te roepen, met adrescontroles |
core/secrets |
De sleutelopslag en sleutelrotatie |
core/logs |
De applog en crashnotities |
core/jobs |
De takenwachtrij, schema’s en de lussen die na een crash herstarten |
core/webserver |
Router, URL base, compressie, live push |
core/startup |
De gebruiker waarmee het programma draait, modus voor weinig geheugen, uitgestelde schakelaars, geheugenlimiet, onderdelen |
core/parts |
De schakelaars voor onderdelen die elke module raadpleegt voordat die iets serveert of uitvoert |
core/model |
Gedeelde typen zoals actors en subjects |
Moet core bij data van een module, dan registreert de module in wiring.go een hook bij core. Sleutelrotatie werkt zo.
Data
| Bestand | Bevat |
|---|---|
holyarrs.db |
De bibliotheek, aanvragen, instellingen en al het andere dat ertoe doet |
holyarrs-events.db |
Geschiedenis en andere gebeurtenisrijen. Dit bestand groeit en wordt opgeschoond zonder het hoofdbestand aan te raken |
Migraties zijn genummerde SQL-bestanden in core/database/migrations/main en core/database/migrations/events. Ze draaien bij het starten.
Gerelateerde pagina’s
Link naar Gerelateerde pagina’sHolyArrs is gratis. Heeft het je tijd bespaard, geef het een ster op GitHub, sponsor het of trakteer me op een kop koffie.