Hoppa till innehåll

Arkitektur

Expert

Ta reda på var koden finns och vilka regler som gäller innan du ändrar något stort.

HolyArrs är ett enda Go-program med webbappen inbyggd. Det serverar webbappen och ett JSON-API på port 6262 och lagrar sin data i 2 SQLite-filer i konfigurationsmappen. Det anropar nedladdare, källor (via Jackett eller Prowlarr), mediaservrar, aviseringskanaler och HolyArrs metadataserver.

Följ en enda förfrågan. Någon ber om en film i Explore (utforska).

  1. requests registrerar förfrågan.
  2. Efter godkännande ber movies sources om releaser.
  3. Urvalsreglerna i mediafiles ger dem poäng.
  4. downloads skickar den bästa till nedladdaren.
  5. När den är klar importerar mediafiles filen.
  6. mediaservers och alerts får veta det.
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 repots rot eftersom go:embed inte kan nå en överordnad mapp.

Du vill ändra Titta i
Hur en release väljs internal/mediafiles
En nedladdarklient internal/downloads, kontraktstester i internal/downloads/conformance_test.go
En aviseringskanal internal/alerts
Inloggning, användare, API-nycklar internal/accounts
Guiden vid första start internal/setup, app/frontend/src/routes/welcome
Import av en färdig fil (uppackning, taggar, matchning) internal/importer
Biblioteksmappar, övertagande och namnbyte internal/library
Hur rader och hyllor väljs och sorteras internal/suggest
Vilka delar av appen som är på internal/core/parts
En sidadress app/frontend/src/routes/
En migrering internal/core/database/migrations/
Docker-imagen deploy/Dockerfile

Kontroller i app/backend/tools/structurecheck får bygget att misslyckas när en regel bryts. Kör dem med raden i Testning.

  • Lagerordning. En modul importerar bara moduler på ett lägre lager, och bara deras rotpaket. Moduler på samma lager importerar aldrig varandra.
  • Anrop uppåt. När en lägre modul behöver något från en högre skickar den högre ner vanlig data, eller så definierar den lägre ett litet gränssnitt som wiring.go fyller i.
  • SQL stannar hemma. Bara en moduls egna store*.go-filer innehåller SQL, och bara över modulens egna tabeller. För att läsa en annan moduls rader anropar du dess tjänst.
  • Delade tabeller tillhör core. Nå settings, schedules, secrets, jobs och events via hjälpfunktioner i core.
  • En enda väg ut. Varje anrop utåt går genom core/outbound.
  • Tillbakahållna funktioner registrerar ett reglage hos core/startup. När det är av finns inte routen, och sidan döljer funktionen.
  • Inga samlingspaket. Inga util, common, shared eller helpers.

Lagerordningen finns i Moduler.

Inuti en modul

Varje backend-modul använder samma filnamn.

Fil Innehåller
routes.go API-routes, var och en med den behörighet den kräver
service.go och ämnesfiler Logik som andra moduler anropar
store.go, store_<topic>.go All SQL för modulens egna tabeller
types.go Modulens poster

På webbsidan innehåller lib/<module>/ filen index.ts (det andra moduler får använda), modulens Svelte-delar och deras tester, samt api.ts och state.svelte.ts bara när modulen har egna anrop eller eget tillstånd.

Core-paket

Core är grundinfrastruktur. Det innehåller inga produktregler och importerar ingen modul.

Paket Innehåller
core/database Öppnar och migrerar båda SQLite-filerna, frågehjälpare, hjälpare för inställningar och händelser, delade radfält, gallring av historik
core/files Fil- och mapphjälpare, ledigt diskutrymme
core/releasename Kvalitet, grupp och avsnittsnummer ur ett releasenamn
core/outbound Den enda vägen för anrop till externa servrar, med adresskontroller
core/secrets Nyckellagret och nyckelrotation
core/logs Applogg och kraschanteckningar
core/jobs Jobbkön, scheman och looparna som startar om efter en krasch
core/webserver Routerns grundfunktioner, URL base, komprimering, live-push
core/startup Användaren programmet körs som, läge för lite minne, tillbakahållna reglage, minnesgräns, delar
core/parts Reglagen för delar som varje modul frågar innan den serverar eller körs
core/model Delade typer som aktörer och subjekt

När core måste röra en moduls data registrerar modulen en hook hos core i wiring.go. Nyckelrotationen fungerar så.

Data
Fil Innehåller
holyarrs.db Biblioteket, förfrågningar, inställningar och allt annat som är viktigt
holyarrs-events.db Historik och andra händelserader. Den växer och gallras utan att huvudfilen berörs

Migreringar är numrerade SQL-filer i core/database/migrations/main och core/database/migrations/events. De körs vid start.

HolyArrs är gratis. Om det sparade dig tid kan du ge det en stjärna på GitHub, sponsra det eller bjuda mig på en kaffe.