Pāriet uz saturu

Arhitektūra

Pieredzējušiem

Uzzini, kur atrodas kods un kādi noteikumi ir spēkā, pirms maini ko lielu.

HolyArrs ir viena Go programma ar iebūvētu tīmekļa lietotni. Tā apkalpo tīmekļa lietotni un JSON API uz porta 6262, un datus glabā 2 SQLite failos konfigurācijas mapē. Tā izsauc lejupielādētājus, avotus (caur Jackett vai Prowlarr), multivides serverus, paziņojumu kanālus un HolyArrs metadatu serveri.

Seko vienam pieprasījumam. Kāds pieprasa filmu sadaļā Izpēte.

  1. requests ieraksta pieprasījumu.
  2. Pēc apstiprināšanas movies pieprasa sources izlaidumus.
  3. Izvēles noteikumi mediafiles tos novērtē ar punktiem.
  4. downloads nosūta labāko lejupielādētājam.
  5. Kad lejupielāde beidzas, mediafiles importē failu.
  6. Par to uzzina mediaservers un alerts.
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 atrodas repozitorija saknē, jo go:embed nevar sasniegt augšējo mapi.

Tu vēlies mainīt Meklē šeit
Kā tiek izvēlēts izlaidums internal/mediafiles
Lejupielādētāja klients internal/downloads, līguma testi internal/downloads/conformance_test.go
Paziņojumu kanāls internal/alerts
Pieteikšanās, lietotāji, API atslēgas internal/accounts
Pirmās palaišanas vednis internal/setup, app/frontend/src/routes/welcome
Pabeigta faila importēšana (izpakošana, birkas, saskaņošana) internal/importer
Bibliotēkas mapes, pārņemšana un pārsaukšana internal/library
Kā tiek izvēlētas un sakārtotas rindas un plaukti internal/suggest
Kuras lietotnes daļas ir ieslēgtas internal/core/parts
Lapas adrese app/frontend/src/routes/
Migrācija internal/core/database/migrations/
Docker attēls deploy/Dockerfile

Pārbaudes mapē app/backend/tools/structurecheck pārtrauc būvēšanu, ja kāds noteikums tiek pārkāpts. Palaid tās ar rindu no Testēšana.

  • Slāņu secība. Modulis importē tikai zemāka slāņa moduļus un tikai to saknes pakotni. Viena slāņa moduļi viens otru nekad neimportē.
  • Izsaukšana uz augšu. Ja zemākam modulim kaut kas vajadzīgs no augstāka, augstākais nodod datus uz leju kā vienkāršus datus, vai arī zemākais definē nelielu saskarni, ko aizpilda wiring.go.
  • SQL paliek mājās. SQL glabā tikai paša moduļa store*.go faili, un tikai par paša moduļa tabulām. Lai nolasītu cita moduļa rindas, izsauc tā servisu.
  • Koplietotās tabulas pieder core. Pie settings, schedules, secrets, jobs un events piekļūsti caur core palīgfunkcijām.
  • Viena izeja. Katrs izsaukums uz āru iet caur core/outbound.
  • Aizturētās funkcijas reģistrē slēdzi ar core/startup. Kamēr tas ir izslēgts, maršruta nav, un lapa funkciju paslēpj.
  • Nekādu „miskastes” pakotņu. Nekādu util, common, shared vai helpers.

Slāņu secība ir sadaļā Moduļi.

Moduļa iekšpuse

Katram aizmugures modulim ir vieni un tie paši failu nosaukumi.

Fails Satur
routes.go API maršruti, katrs ar tam vajadzīgo atļauju
service.go un tēmu faili Loģika, ko izsauc citi moduļi
store.go, store_<topic>.go Viss SQL par moduļa paša tabulām
types.go Moduļa ieraksti

Tīmekļa pusē lib/<module>/ satur index.ts (ko drīkst izmantot citi moduļi), tā Svelte daļas un to testus, kā arī api.ts un state.svelte.ts tikai tad, ja modulim ir savi izsaukumi vai stāvoklis.

Core pakotnes

Core ir pamatinfrastruktūra. Tajā nav produkta noteikumu, un tas neimportē nevienu moduli.

Pakotne Satur
core/database Abu SQLite failu atvēršana un migrēšana, vaicājumu palīgfunkcijas, iestatījumu un notikumu palīgfunkcijas, kopīgie rindu lauki, vēstures apgriešana
core/files Failu un mapju palīgfunkcijas, brīva vieta diskā
core/releasename Kvalitāte, grupa un epizožu numuri no izlaiduma nosaukuma
core/outbound Vienīgais veids, kā izsaukt ārējos serverus, ar adrešu pārbaudēm
core/secrets Atslēgu glabātuve un atslēgu rotācija
core/logs Lietotnes žurnāls un avāriju piezīmes
core/jobs Uzdevumu rinda, grafiki un cilpas, kas pēc avārijas restartējas
core/webserver Maršrutētāja pamati, URL base, saspiešana, tiešā pārraide
core/startup Palaišanas lietotājs, zemas atmiņas režīms, aizturēto funkciju slēdži, atmiņas limits, daļas
core/parts Daļu slēdži, ko katrs modulis pārbauda, pirms apkalpo vai darbojas
core/model Kopīgi tipi, piemēram, aktieri un subjekti

Kad core jāpiekļūst moduļa datiem, modulis reģistrē āķi pie core failā wiring.go. Tā darbojas atslēgu rotācija.

Dati
Fails Satur
holyarrs.db Bibliotēku, pieprasījumus, iestatījumus un visu pārējo svarīgo
holyarrs-events.db Vēsturi un citas notikumu rindas. Tas aug un tiek apgriezts, neskarot galveno failu

Migrācijas ir numurēti SQL faili mapēs core/database/migrations/main un core/database/migrations/events. Tie darbojas startā.

HolyArrs ir bezmaksas. Ja tas ietaupīja tavu laiku, atzīmē to ar zvaigznīti GitHub, atbalsti to vai uzcienā mani ar kafiju.