Architektūra
Pažengusiam
Sužinok, kur gyvena kodas ir kokios taisyklės galioja, prieš keisdamas ką nors didesnio.
Trumpai
Nuoroda į TrumpaiHolyArrs yra viena Go programa su įdėta žiniatinklio programa. Ji aptarnauja žiniatinklio programą ir JSON API per portą 6262, o duomenis laiko 2 SQLite failuose konfigūracijos aplanke. Ji kreipiasi į atsisiuntimo programas, šaltinius (per Jackett arba Prowlarr), medijos serverius, pranešimų kanalus ir HolyArrs metaduomenų serverį.
Sek vieną prašymą. Kažkas paprašo filmo skiltyje Explore (atrasti).
requestsužfiksuoja prašymą.- Po patvirtinimo
moviespaprašosourcesrelease. mediafilesparinkimo taisyklės juos įvertina.downloadsgeriausią išsiunčia atsisiuntimo programai.- Kai atsisiuntimas baigiasi,
mediafilesimportuoja failą. mediaserversiralertsgauna žinią.
Kodo žemėlapis
Nuoroda į Kodo žemėlapisapp/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 yra repo šaknyje, nes go:embed negali pasiekti aukštesnio aplanko.
Kur ką rasti
Nuoroda į Kur ką rasti| Nori pakeisti | Žiūrėk į |
|---|---|
| Kaip parenkamas release | internal/mediafiles |
| Atsisiuntimo programos klientą | internal/downloads, sutarties testai internal/downloads/conformance_test.go |
| Pranešimų kanalą | internal/alerts |
| Prisijungimą, naudotojus, API raktus | internal/accounts |
| Pirmo paleidimo vedlį | internal/setup, app/frontend/src/routes/welcome |
| Baigto failo importą (išpakavimas, tagai, atitikimas) | internal/importer |
| Bibliotekos aplankus, perėmimą ir pervadinimą | internal/library |
| Kaip parenkamos ir išdėstomos eilutės bei lentynos | internal/suggest |
| Kurios programos dalys įjungtos | internal/core/parts |
| Puslapio adresą | app/frontend/src/routes/ |
| Migraciją | internal/core/database/migrations/ |
| Docker image | deploy/Dockerfile |
Taisyklės
Nuoroda į TaisyklėsPatikros app/backend/tools/structurecheck nutraukia build, kai viena taisyklė pažeidžiama. Paleisk jas komanda iš testavimo puslapio.
- Sluoksnių tvarka. Modulis importuoja tik žemesnio sluoksnio modulius ir tik jų šakninį paketą. To paties sluoksnio moduliai niekada neimportuoja vienas kito.
- Kreipimasis aukštyn. Kai žemesniam moduliui kažko reikia iš aukštesnio, aukštesnis perduoda paprastus duomenis žemyn arba žemesnis apibrėžia mažą sąsają, kurią užpildo
wiring.go. - SQL lieka namie. SQL laiko tik paties modulio
store*.gofailai ir tik virš to modulio lentelių. Kad perskaitytum kito modulio eilutes, kreipkis į jo servisą. - Bendros lentelės priklauso core. Prie
settings,schedules,secrets,jobsireventsprieik per core pagalbines funkcijas. - Vienas kelias į išorę. Kiekvienas išorinis kreipinys eina per
core/outbound. - Atidėtos funkcijos užregistruoja jungiklį per
core/startup. Kol jis išjungtas, maršruto nėra, o puslapis funkciją paslepia. - Jokių šiukšlių paketų. Jokių
util,common,sharedarhelpers.
Sluoksnių tvarka aprašyta modulių puslapyje.
Pažengusiems
Nuoroda į PažengusiemsModulio viduje
Kiekvienas serverio pusės modulis naudoja tuos pačius failų pavadinimus.
| Failas | Laiko |
|---|---|
routes.go |
API maršrutus, kiekvieną su jam reikalinga teise |
service.go ir temų failai |
Logiką, kurią kviečia kiti moduliai |
store.go, store_<topic>.go |
Visą SQL modulio lentelėms |
types.go |
Modulio įrašus |
Žiniatinklio pusėje lib/<module>/ laiko index.ts (ką gali naudoti kiti moduliai), savo Svelte dalis ir jų testus, o api.ts ir state.svelte.ts tik tada, kai modulis turi savų kreipinių ar būsenos.
Core paketai
Core yra bendras pagrindas, ant kurio stovi moduliai. Jame nėra produkto taisyklių ir jis neimportuoja jokio modulio.
| Paketas | Laiko |
|---|---|
core/database |
Abiejų SQLite failų atidarymą ir migravimą, užklausų pagalbines funkcijas, nustatymų ir įvykių pagalbines funkcijas, bendrus eilučių laukus, istorijos apkarpymą |
core/files |
Failų ir aplankų pagalbines funkcijas, laisvą vietą diske |
core/releasename |
Kokybę, grupę ir serijų numerius iš release pavadinimo |
core/outbound |
Vienintelį kelią kreiptis į išorinius serverius, su adresų patikra |
core/secrets |
Raktų saugyklą ir raktų keitimą |
core/logs |
Programos log ir strigčių užrašus |
core/jobs |
Užduočių eilę, tvarkaraščius ir ciklus, kurie po strigties paleidžiami iš naujo |
core/webserver |
Maršrutizatoriaus pagrindą, URL base, glaudinimą, gyvą siuntimą |
core/startup |
Naudotoją, kuriuo veikia programa, mažos atminties režimą, atidėtų funkcijų jungiklius, atminties limitą, dalis |
core/parts |
Dalių jungiklius, kurių kiekvienas modulis paklausia prieš aptarnaudamas ar vykdydamas |
core/model |
Bendrus tipus, pavyzdžiui, veikėjus ir subjektus |
Kai core turi liesti modulio duomenis, modulis užregistruoja kabliuką core faile wiring.go. Raktų keitimas veikia būtent taip.
Duomenys
| Failas | Laiko |
|---|---|
holyarrs.db |
Biblioteką, prašymus, nustatymus ir viską, kas svarbu |
holyarrs-events.db |
Istoriją ir kitas įvykių eilutes. Jis auga ir apkarpomas neliečiant pagrindinio failo |
Migracijos yra sunumeruoti SQL failai core/database/migrations/main ir core/database/migrations/events. Jos vykdomos paleidžiant programą.
Susiję puslapiai
Nuoroda į Susiję puslapiaiHolyArrs yra nemokama. Jei sutaupė tau laiko, pažymėk jį žvaigždute GitHub, paremk jį arba nupirk man kavos.