Arkitektur
Expert
Ta reda på var koden finns och vilka regler som gäller innan du ändrar något stort.
Kort version
Länk till Kort versionHolyArrs ä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).
requestsregistrerar förfrågan.- Efter godkännande ber
moviessourcesom releaser. - Urvalsreglerna i
mediafilesger dem poäng. downloadsskickar den bästa till nedladdaren.- När den är klar importerar
mediafilesfilen. mediaserversochalertsfår veta det.
Kodkarta
Länk till Kodkartaapp/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 repots rot eftersom go:embed inte kan nå en överordnad mapp.
Var du hittar saker
Länk till Var du hittar saker| 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 |
Reglerna
Länk till ReglernaKontroller 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.gofyller 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,jobsocheventsvia 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,sharedellerhelpers.
Lagerordningen finns i Moduler.
För experter
Länk till För experterInuti 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.
Relaterat
Länk till RelateratHolyArrs är gratis. Om det sparade dig tid kan du ge det en stjärna på GitHub, sponsra det eller bjuda mig på en kaffe.