Edasi sisu juurde

Arhitektuur

Asjatundja

Enne suure muudatuse tegemist uuri, kus kood asub ja millised reeglid kehtivad.

HolyArrs on üks Go programm, millesse on veebirakendus sisse ehitatud. See pakub veebirakendust ja JSON API-t pordil 6262 ning hoiab andmeid kahes SQLite-failis seadete kaustas. Programm pöördub allalaadijate, allikate (Jacketti või Prowlarri kaudu), meediaserverite, teavituskanalite ja HolyArrsi metaandmete serveri poole.

Jälgi üht päringut. Keegi soovib lehel Explore (avasta) filmi.

  1. requests salvestab soovi.
  2. Pärast kinnitamist küsib movies väljalasked moodulilt sources.
  3. Moodulis mediafiles olevad valikureeglid annavad neile punkte.
  4. downloads saadab parima allalaadijale.
  5. Kui allalaadimine on valmis, impordib mediafiles faili.
  6. mediaservers ja alerts saavad sellest teada.
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 asub repo juurkaustas, sest go:embed ei ulatu ülemkausta.

Soovid muuta Vaata siit
Kuidas väljalaset valitakse internal/mediafiles
Allalaadija klient internal/downloads, lepingutestid failis internal/downloads/conformance_test.go
Teavituskanal internal/alerts
Sisselogimine, kasutajad, API-võtmed internal/accounts
Esimese käivituse viisard internal/setup, app/frontend/src/routes/welcome
Valmis faili import (lahtipakkimine, sildid, sobitamine) internal/importer
Meediakogu kaustad, üle võtmine ja ümbernimetamine internal/library
Kuidas ridu ja riiuleid valitakse ja järjestatakse internal/suggest
Millised rakenduse osad on sees internal/core/parts
Lehe aadress app/frontend/src/routes/
Migratsioon internal/core/database/migrations/
Docker image deploy/Dockerfile

Kontrollid kaustas app/backend/tools/structurecheck ebaõnnestuvad ehitamisel, kui mõni reegel on rikutud. Käivita need käsuga lehel Testimine.

  • Kihtide järjekord. Moodul impordib ainult madalama kihi mooduleid ja ainult nende juurpaketti. Samal kihil olevad moodulid ei impordi üksteist kunagi.
  • Ülespoole kutsumine. Kui madalam moodul vajab midagi kõrgemalt, annab kõrgem moodul talle lihtsad andmed alla või madalam moodul määrab väikese liidese, mille wiring.go täidab.
  • SQL jääb koju. SQL asub ainult mooduli enda store*.go failides ja ainult mooduli enda tabelite kohal. Teise mooduli ridade lugemiseks kutsu selle teenust.
  • Jagatud tabelid kuuluvad core’ile. Tabelitele settings, schedules, secrets, jobs ja events pääse core’i abifunktsioonide kaudu.
  • Üks väljapääs. Iga väljapoole suunatud päring käib läbi core/outbound.
  • Edasi lükatud funktsioonid registreerivad lüliti moodulis core/startup. Kui lüliti on väljas, siis marsruuti pole ja leht peidab funktsiooni.
  • Ei mingeid kõigepakette. Ei util, common, shared ega helpers.

Kihtide järjekord on lehel Moodulid.

Mooduli sees

Iga taustaosa moodul kasutab samu failinimesid.

Fail Sisaldab
routes.go API marsruudid, igaühel vajalik õigus
service.go ja teemafailid Loogika, mida teised moodulid kutsuvad
store.go, store_<topic>.go Kogu SQL mooduli enda tabelite jaoks
types.go Mooduli kirjed

Veebi poolel hoiab lib/<module>/ faili index.ts (mida teised moodulid tohivad kasutada), oma Svelte osi ja nende teste, ning api.ts ja state.svelte.ts ainult siis, kui moodulil on oma päringud või olek.

Core paketid

Core on torustik. Selles pole tootereegleid ja see ei impordi ühtegi moodulit.

Pakett Sisaldab
core/database Mõlema SQLite-faili avamine ja migreerimine, päringute abifunktsioonid, seadete ja sündmuste abifunktsioonid, jagatud ridade väljad, ajaloo kärpimine
core/files Faili- ja kaustaabifunktsioonid, vaba kettaruum
core/releasename Kvaliteet, grupp ja episoodinumbrid väljalaske nimest
core/outbound Ainus viis välisserveritele helistada, koos aadressikontrollidega
core/secrets Võtmehoidla ja võtmete vahetus
core/logs Rakenduse logi ja kokkujooksmise märkmed
core/jobs Tööülesannete järjekord, ajakavad ja tsüklid, mis pärast kokkujooksmist uuesti käivituvad
core/webserver Router, URL base, tihendamine, reaalajas edastus
core/startup Kasutaja, kelle all käivitatakse, vähese mälu režiim, edasi lükatud lülitid, mälupiir, osad
core/parts Osade lülitid, mida iga moodul enne teenindamist või käivitamist küsib
core/model Jagatud tüübid, näiteks tegutsejad ja subjektid

Kui core peab mooduli andmetega tegelema, registreerib moodul failis wiring.go core’is konksu. Võtmete vahetus töötab nii.

Andmed
Fail Sisaldab
holyarrs.db Meediakogu, soovid, seaded ja kõik muu tähtsa
holyarrs-events.db Ajalugu ja muud sündmuste read. See kasvab ja seda kärbitakse, peafaili puutumata

Migratsioonid on nummerdatud SQL-failid kaustades core/database/migrations/main ja core/database/migrations/events. Need jooksevad käivitamisel.

HolyArrs on tasuta. Kui see säästis sinu aega, anna talle GitHubis täht, toeta teda või osta mulle kohvi.