Gå til innholdet

Arkitektur

Ekspert

Finn ut hvor koden ligger og hvilke regler som gjelder før du endrer noe stort.

HolyArrs er ett Go-program med web-appen innebygd. Det serverer web-appen og et JSON-API på port 6262, og lagrer dataene i 2 SQLite-filer i konfigurasjonsmappen. Det kaller opp nedlastere, kilder (via Jackett eller Prowlarr), medieservere, varselkanaler og metadataserveren til HolyArrs.

Følg én forespørsel. Noen ber om en film på Explore (Utforsk).

  1. requests registrerer forespørselen.
  2. Etter godkjenning ber movies sources om releaser.
  3. Valgreglene i mediafiles gir dem poeng.
  4. downloads sender den beste til nedlasteren.
  5. Når den er ferdig, importerer mediafiles filen.
  6. mediaservers og alerts får beskjed.
app/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins them
app/backend/internal/<module>/ one flat folder per module
app/backend/internal/core/ plumbing every module may use
app/backend/tools/ dev-only programs
app/frontend/ the SvelteKit web app; embed.go bundles its build
app/frontend/src/routes/<page>/ thin pages that combine module parts
app/frontend/src/lib/<module>/ each module's web code
app/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing else
app/frontend/src/lib/core/ server client, app state, helpers
app/tests/ end-to-end tests (Playwright)
deploy/ the Dockerfile and release scripts
docs/ guides and these pages

go.mod ligger i roten av repoet fordi go:embed ikke kommer til en overordnet mappe.

Du vil endre Se i
Hvordan en release velges internal/mediafiles
En nedlasterklient internal/downloads, kontrakttester i internal/downloads/conformance_test.go
En varselkanal internal/alerts
Innlogging, brukere, API-nøkler internal/accounts
Veiviseren ved første oppstart internal/setup, app/frontend/src/routes/welcome
Import av en ferdig fil (utpakking, tagger, matching) internal/importer
Bibliotekmapper, overtakelse og omdøping internal/library
Hvordan rader og hyller velges og sorteres internal/suggest
Hvilke deler av appen som er på internal/core/parts
En sideadresse app/frontend/src/routes/
En migrering internal/core/database/migrations/
Docker-imaget deploy/Dockerfile

Sjekker i app/backend/tools/structurecheck får bygget til å feile når en regel brytes. Kjør dem med linjen i Testing.

  • Rekkefølge på lagene. En modul importerer bare moduler på et lavere lag, og bare rotpakken deres. Moduler på samme lag importerer aldri hverandre.
  • Kall oppover. Når en lavere modul trenger noe fra en høyere, sender den høyere ned rene data, eller den lavere definerer et lite grensesnitt som wiring.go fyller inn.
  • SQL blir hjemme. Bare modulens egne store*.go-filer inneholder SQL, og bare over modulens egne tabeller. Vil du lese radene til en annen modul, kall tjenesten dens.
  • Delte tabeller hører til core. Bruk hjelperne i core for å nå settings, schedules, secrets, jobs og events.
  • Én vei ut. Alle kall til utsiden går gjennom core/outbound.
  • Tilbakeholdte funksjoner registrerer en bryter hos core/startup. Mens den er av, finnes ikke ruten, og siden skjuler funksjonen.
  • Ingen samlepakker. Ingen util, common, shared eller helpers.

Rekkefølgen på lagene står i Moduler.

Inni en modul

Alle backend-moduler bruker de samme filnavnene.

Fil Inneholder
routes.go API-ruter, hver med tillatelsen den trenger
service.go og emnefiler Logikk som andre moduler kaller
store.go, store_<topic>.go All SQL for modulens egne tabeller
types.go Modulens poster

På web-siden har lib/<module>/ filen index.ts (det andre moduler kan bruke), Svelte-delene med testene deres, og api.ts og state.svelte.ts bare når modulen har egne kall eller egen tilstand.

Core-pakker

Core er infrastrukturen. Den har ingen produktregler og importerer ingen modul.

Pakke Inneholder
core/database Åpning og migrering av begge SQLite-filene, spørringshjelpere, hjelpere for innstillinger og hendelser, felles radfelt, trimming av historikk
core/files Hjelpere for filer og mapper, ledig diskplass
core/releasename Kvalitet, gruppe og episodenumre fra et release-navn
core/outbound Den ene veien for å kalle servere utenfor, med adressesjekker
core/secrets Nøkkellageret og nøkkelrotasjon
core/logs Applogg og krasjnotater
core/jobs Oppgavekøen, tidsplaner og løkkene som starter på nytt etter et krasj
core/webserver Ruteroppsett, URL base, komprimering, live push
core/startup Kjør-som-bruker, modus for lite minne, tilbakeholdte brytere, minnegrense, deler
core/parts Del-bryterne alle moduler spør før de serverer eller kjører
core/model Felles typer som aktører og subjekter

Når core må røre moduldata, registrerer modulen en hook hos core i wiring.go. Nøkkelrotasjon fungerer slik.

Data
Fil Inneholder
holyarrs.db Biblioteket, forespørslene, innstillingene og alt annet som betyr noe
holyarrs-events.db Historikk og andre hendelsesrader. Den vokser og trimmes uten å røre hovedfilen

Migreringer er nummererte SQL-filer i core/database/migrations/main og core/database/migrations/events. De kjører ved oppstart.

HolyArrs er gratis. Hvis det sparte deg tid, kan du gi det en stjerne på GitHub, sponse det eller spandere en kaffe.