Arkitektur
Ekspert
Finn ut hvor koden ligger og hvilke regler som gjelder før du endrer noe stort.
Kort fortalt
Lenke til Kort fortaltHolyArrs 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).
requestsregistrerer forespørselen.- Etter godkjenning ber
moviessourcesom releaser. - Valgreglene i
mediafilesgir dem poeng. downloadssender den beste til nedlasteren.- Når den er ferdig, importerer
mediafilesfilen. mediaserversogalertsfår beskjed.
Kodekart
Lenke til Kodekartapp/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 ligger i roten av repoet fordi go:embed ikke kommer til en overordnet mappe.
Hvor du finner ting
Lenke til Hvor du finner ting| 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 |
Reglene
Lenke til RegleneSjekker 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.gofyller 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,jobsogevents. - É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,sharedellerhelpers.
Rekkefølgen på lagene står i Moduler.
For viderekomne
Lenke til For viderekomneInni 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.
Relatert
Lenke til RelatertHolyArrs er gratis. Hvis det sparte deg tid, kan du gi det en stjerne på GitHub, sponse det eller spandere en kaffe.