Preskoči na sadržaj

Arhitektura

Napredno

Prije nego promijeniš nešto veliko, saznaj gdje je kod i koja pravila vrijede.

HolyArrs je jedan Go program s ugrađenom web aplikacijom. Poslužuje web aplikaciju i JSON API na portu 6262, a podatke drži u 2 SQLite datoteke u mapi s konfiguracijom. Poziva preuzimatelje, izvore (preko Jackketta ili Prowlarra), medijske poslužitelje, kanale za obavijesti i HolyArrs server s metapodacima.

Prati jedan zahtjev. Netko na Istraži zatraži film.

  1. requests zabilježi zahtjev.
  2. Nakon odobrenja movies traži od sources releasee.
  3. Pravila odabira u mediafiles ih boduju.
  4. downloads šalje najbolji preuzimatelju.
  5. Kad završi, mediafiles uveze datoteku.
  6. mediaservers i alerts dobiju poruku.
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 je u korijenu repozitorija jer go:embed ne može doseći nadređenu mapu.

Želiš promijeniti Pogledaj u
Kako se bira release internal/mediafiles
Klijent preuzimatelja internal/downloads, ugovorni testovi u internal/downloads/conformance_test.go
Kanal za obavijesti internal/alerts
Prijava, korisnici, API ključevi internal/accounts
Čarobnjak za prvo pokretanje internal/setup, app/frontend/src/routes/welcome
Uvoz gotove datoteke (raspakiravanje, tagovi, povezivanje) internal/importer
Mape biblioteke, usvajanje i preimenovanje internal/library
Kako se biraju i slažu redovi i police internal/suggest
Koji su dijelovi aplikacije uključeni internal/core/parts
Adresa stranice app/frontend/src/routes/
Migracija internal/core/database/migrations/
Docker image deploy/Dockerfile

Provjere u app/backend/tools/structurecheck ruše build kad se neko pravilo prekrši. Pokreni ih naredbom iz Testiranja.

  • Redoslijed slojeva. Modul uvozi samo module s nižeg sloja, i to samo njihov korijenski paket. Moduli na istom sloju nikad ne uvoze jedan drugoga.
  • Poziv prema gore. Kad niži modul treba nešto od višeg, viši mu preda obične podatke, ili niži definira malo sučelje koje wiring.go popuni.
  • SQL ostaje kod kuće. SQL drže samo vlastite store*.go datoteke modula, i to samo nad njegovim tablicama. Za retke drugog modula pozovi njegov service.
  • Zajedničke tablice pripadaju coreu. settings, schedules, secrets, jobs i events dohvaćaj preko core helpera.
  • Jedan izlaz. Svaki vanjski poziv ide kroz core/outbound.
  • Zadržane značajke registriraju prekidač u core/startup. Dok je isključen, ruta ne postoji, a stranica skriva značajku.
  • Nema paketa za sve i svašta. Nema util, common, shared ni helpers.

Redoslijed slojeva je u Modulima.

Unutar modula

Svaki backend modul koristi ista imena datoteka.

Datoteka Sadrži
routes.go API rute, svaka s dozvolom koja joj treba
service.go i datoteke po temama Logiku koju zovu drugi moduli
store.go, store_<topic>.go Sav SQL za tablice samog modula
types.go Zapise modula

Na strani weba lib/<module>/ sadrži index.ts (ono što drugi moduli smiju koristiti), svoje Svelte dijelove i njihove testove, te api.ts i state.svelte.ts samo ako modul ima vlastite pozive ili stanje.

Core paketi

Core je infrastruktura. Ne sadrži pravila proizvoda i ne uvozi nijedan modul.

Paket Sadrži
core/database Otvaranje i migriranje obiju SQLite datoteka, helpere za upite, helpere za postavke i događaje, zajednička polja redaka, skraćivanje povijesti
core/files Helpere za datoteke i mape, slobodan prostor na disku
core/releasename Kvalitetu, grupu i brojeve epizoda iz imena releasea
core/outbound Jedini način za pozivanje vanjskih servera, s provjerom adresa
core/secrets Spremište ključeva i rotaciju ključeva
core/logs Log aplikacije i bilješke o rušenjima
core/jobs Red zadataka, rasporede i petlje koje se ponovno pokreću nakon rušenja
core/webserver Router, URL base, kompresiju, live push
core/startup Korisnika pod kojim se pokreće, način rada s malo memorije, prekidače zadržanih značajki, ograničenje memorije, dijelove
core/parts Prekidače dijelova koje svaki modul provjeri prije nego poslužuje ili radi
core/model Zajedničke tipove, poput aktora i subjekata

Kad core mora dirati podatke modula, modul registrira hook u coreu u wiring.go. Rotacija ključeva radi na taj način.

Podaci
Datoteka Sadrži
holyarrs.db Biblioteku, zahtjeve, postavke i sve ostalo što je važno
holyarrs-events.db Povijest i druge retke događaja. Raste i skraćuje se bez diranja glavne datoteke

Migracije su numerirane SQL datoteke u core/database/migrations/main i core/database/migrations/events. Izvršavaju se pri pokretanju.

HolyArrs je besplatan. Ako ti je uštedio vrijeme, daj mu zvjezdicu na GitHubu, podrži ga ili počasti me kavom.