Arhitektura
Napredno
Prije nego promijeniš nešto veliko, saznaj gdje je kod i koja pravila vrijede.
Ukratko
Poveznica na UkratkoHolyArrs 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.
requestszabilježi zahtjev.- Nakon odobrenja
moviestraži odsourcesreleasee. - Pravila odabira u
mediafilesih boduju. downloadsšalje najbolji preuzimatelju.- Kad završi,
mediafilesuveze datoteku. mediaserversialertsdobiju poruku.
Karta koda
Poveznica na Karta kodaapp/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 je u korijenu repozitorija jer go:embed ne može doseći nadređenu mapu.
Gdje što pronaći
Poveznica na Gdje što pronaći| Ž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 |
Pravila
Poveznica na PravilaProvjere 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.gopopuni. - SQL ostaje kod kuće. SQL drže samo vlastite
store*.godatoteke modula, i to samo nad njegovim tablicama. Za retke drugog modula pozovi njegov service. - Zajedničke tablice pripadaju coreu.
settings,schedules,secrets,jobsieventsdohvać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,sharednihelpers.
Redoslijed slojeva je u Modulima.
Za napredne
Poveznica na Za napredneUnutar 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.
Povezane stranice
Poveznica na Povezane straniceHolyArrs je besplatan. Ako ti je uštedio vrijeme, daj mu zvjezdicu na GitHubu, podrži ga ili počasti me kavom.