Langkau ke kandungan

Seni bina

Pakar

Ketahui di mana kod berada dan peraturan mana yang terpakai sebelum anda mengubah sesuatu yang besar.

HolyArrs ialah satu program Go dengan app web terbina dalam. Ia menyediakan app web dan API JSON pada port 6262, dan menyimpan datanya dalam 2 fail SQLite di folder konfigurasi. Ia memanggil pemuat turun, Sumber (melalui Jackett atau Prowlarr), pelayan media, saluran amaran dan pelayan metadata HolyArrs.

Ikuti satu permintaan. Seseorang meminta sebuah filem di Teroka.

  1. requests merekodkan permintaan itu.
  2. Selepas diluluskan, movies meminta keluaran daripada sources.
  3. Peraturan pilihan dalam mediafiles memberi markah kepada keluaran itu.
  4. downloads menghantar yang terbaik kepada pemuat turun.
  5. Apabila siap, mediafiles mengimport failnya.
  6. mediaservers dan alerts diberitahu.
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 berada di akar repo kerana go:embed tidak boleh mencapai folder induk.

Di mana mencari sesuatu

Pautan ke Di mana mencari sesuatu
Anda mahu mengubah Lihat di
Cara sesuatu keluaran dipilih internal/mediafiles
Penyambung ke pemuat turun internal/downloads, ujian kontrak dalam internal/downloads/conformance_test.go
Saluran amaran internal/alerts
Log masuk, pengguna, kunci API internal/accounts
Wizard larian pertama internal/setup, app/frontend/src/routes/welcome
Mengimport fail yang sudah siap (nyahpek, teg, padanan) internal/importer
Folder Pustaka, mengambil alih dan menamakan semula internal/library
Cara baris dan rak dipilih dan disusun internal/suggest
Bahagian app yang hidup internal/core/parts
Alamat halaman app/frontend/src/routes/
Satu migrasi internal/core/database/migrations/
Imej Docker deploy/Dockerfile

Semakan dalam app/backend/tools/structurecheck menggagalkan binaan apabila ada peraturan yang dilanggar. Jalankannya dengan baris dalam Pengujian.

  • Susunan lapisan. Sesuatu modul hanya mengimport modul pada lapisan yang lebih rendah, dan hanya pakej akarnya. Modul pada lapisan yang sama tidak pernah mengimport satu sama lain.
  • Memanggil ke atas. Apabila modul yang lebih rendah memerlukan sesuatu daripada yang lebih tinggi, modul yang lebih tinggi menghantar data biasa ke bawah, atau modul yang lebih rendah mentakrifkan antara muka kecil yang diisi oleh wiring.go.
  • SQL kekal di rumah. Hanya fail store*.go milik modul itu sendiri yang memuatkan SQL, dan hanya untuk jadualnya sendiri. Untuk membaca baris modul lain, panggil servisnya.
  • Jadual kongsi milik core. Capai settings, schedules, secrets, jobs dan events melalui pembantu core.
  • Satu jalan keluar. Setiap panggilan ke luar melalui core/outbound.
  • Ciri ditahan mendaftarkan suis dengan core/startup. Selagi suis dimatikan, laluannya tiada dan halaman menyembunyikan ciri itu.
  • Tiada pakej serba ada. Tiada util, common, shared atau helpers.

Susunan lapisan ada dalam Modul.

Di dalam sebuah modul

Setiap modul bahagian belakang menggunakan nama fail yang sama.

Fail Memuatkan
routes.go Laluan API, setiap satu dengan kebenaran yang diperlukan
service.go dan fail topik Logik yang dipanggil modul lain
store.go, store_<topic>.go Semua SQL untuk jadual milik modul itu
types.go Rekod modul itu

Di bahagian web, lib/<module>/ memuatkan index.ts (apa yang boleh digunakan modul lain), bahagian Sveltenya dan ujiannya, serta api.ts dan state.svelte.ts hanya apabila ia mempunyai panggilan atau keadaan sendiri.

Pakej core

Core ialah kod asas yang dikongsi. Ia tidak memuatkan peraturan produk dan tidak mengimport mana-mana modul.

Pakej Memuatkan
core/database Membuka dan memigrasi kedua-dua fail SQLite, pembantu pertanyaan, pembantu tetapan dan peristiwa, medan baris kongsi, pemangkasan sejarah
core/files Pembantu fail dan folder, ruang cakera kosong
core/releasename Kualiti, kumpulan dan nombor episod daripada nama keluaran
core/outbound Satu-satunya cara memanggil pelayan luar, dengan semakan alamat
core/secrets Stor kunci dan pusingan kunci
core/logs Log app dan nota ranap
core/jobs Giliran tugas, jadual dan gelung yang bermula semula selepas ranap
core/webserver Asas penghala, URL base, mampatan, tolakan langsung
core/startup Pengguna larian, mod memori rendah, suis ciri ditahan, had memori, bahagian
core/parts Suis bahagian yang disemak setiap modul sebelum menyediakan atau berjalan
core/model Jenis kongsi seperti pelaku dan subjek

Apabila core perlu menyentuh data modul, modul itu mendaftarkan cangkuk dengan core dalam wiring.go. Pusingan kunci berfungsi dengan cara ini.

Data
Fail Memuatkan
holyarrs.db Pustaka, permintaan, tetapan dan semua yang penting
holyarrs-events.db Sejarah dan baris peristiwa lain. Ia membesar dan dipangkas tanpa menyentuh fail utama

Migrasi ialah fail SQL bernombor dalam core/database/migrations/main dan core/database/migrations/events. Ia berjalan semasa permulaan.

HolyArrs percuma. Jika ia menjimatkan masa anda, beri bintang di GitHub, taja projek ini atau belanja saya kopi.