Mimari
Uzman
Büyük bir şeyi değiştirmeden önce kodun nerede durduğunu ve hangi kuralların geçerli olduğunu bul.
Kısa özet
Kısa özet bağlantısıHolyArrs, web uygulaması içine gömülü tek bir Go programıdır. Web uygulamasını ve bir JSON API’sini 6262 portundan sunar, verilerini yapılandırma klasöründeki 2 SQLite dosyasında tutar. İndiricilere, Kaynaklara (Jackett veya Prowlarr üzerinden), medya sunucularına, uyarı kanallarına ve HolyArrs metadata sunucusuna dışarıdan istek atar.
Tek bir isteği takip et. Biri Explore’da (Keşfet) bir film istiyor.
requestsisteği kaydeder.- Onaydan sonra
movies,sourcesmodülünden sürüm adaylarını ister. mediafilesiçindeki seçim kuralları bunlara puan verir.downloadsen iyisini indiriciye gönderir.- İndirme bitince
mediafilesdosyayı içe aktarır. mediaserversvealertshaberdar edilir.
Kod haritası
Kod haritası bağlantısıapp/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 repo kökünde durur, çünkü go:embed üst klasöre uzanamaz.
Neyin nerede olduğunu bul
Neyin nerede olduğunu bul bağlantısı| Değiştirmek istediğin şey | Bakılacak yer |
|---|---|
| Bir sürüm adayının nasıl seçildiği | internal/mediafiles |
| Bir indirici istemcisi | internal/downloads, sözleşme testleri internal/downloads/conformance_test.go içinde |
| Bir uyarı kanalı | internal/alerts |
| Giriş, kullanıcılar, API anahtarları | internal/accounts |
| İlk açılış sihirbazı | internal/setup, app/frontend/src/routes/welcome |
| Biten bir dosyayı içe aktarma (arşivden çıkarma, etiketler, eşleştirme) | internal/importer |
| Kütüphane klasörleri, sahiplenme ve yeniden adlandırma | internal/library |
| Satırların ve rafların nasıl seçilip sıralandığı | internal/suggest |
| Uygulamanın hangi modüllerinin açık olduğu | internal/core/parts |
| Bir sayfa adresi | app/frontend/src/routes/ |
| Bir migrasyon | internal/core/database/migrations/ |
| Docker imajı | deploy/Dockerfile |
Kurallar
Kurallar bağlantısıapp/backend/tools/structurecheck içindeki denetimler, bir kural bozulduğunda derlemeyi başarısız kılar. Bunları Test sayfasındaki satırla çalıştır.
- Katman sırası. Bir modül yalnızca alt katmandaki modülleri, o da sadece kök paketlerini içe aktarır. Aynı katmandaki modüller birbirini asla içe aktarmaz.
- Yukarı çağırma. Alttaki bir modülün üsttekinden bir şeye ihtiyacı olursa, ya üstteki düz veriyi aşağı geçirir ya da alttaki küçük bir arayüz tanımlar ve bunu
wiring.godoldurur. - SQL kendi evinde kalır. SQL’i yalnızca modülün kendi
store*.godosyaları tutar, o da sadece kendi tabloları üzerinde. Başka bir modülün satırlarını okumak için onun servisini çağır. - Ortak tablolar core’a aittir.
settings,schedules,secrets,jobsveeventstablolarına core yardımcıları üzerinden eriş. - Tek çıkış yolu. Dışarıya giden her çağrı
core/outboundüzerinden geçer. - Bekletilen özellikler
core/startupile bir anahtar kaydeder. Anahtar kapalıyken rota yoktur ve sayfa özelliği gizler. - Her şeyin atıldığı paketler yok.
util,common,sharedveyahelpersyok.
Katman sırası Modüller sayfasında.
Uzmanlar için
Uzmanlar için bağlantısıBir modülün içi
Her backend modülü aynı dosya adlarını kullanır.
| Dosya | İçeriği |
|---|---|
routes.go |
API rotaları, her biri gerektirdiği izinle |
service.go ve konu dosyaları |
Diğer modüllerin çağırdığı mantık |
store.go, store_<topic>.go |
Modülün kendi tabloları için tüm SQL |
types.go |
Modülün kayıtları |
Web tarafında lib/<module>/ şunları tutar: index.ts (diğer modüllerin kullanabileceği şeyler), Svelte parçaları ve testleri, ayrıca yalnızca kendi çağrıları veya durumu varsa api.ts ve state.svelte.ts.
Core paketleri
Core, altyapıdır. Ürün kuralı tutmaz ve hiçbir modülü içe aktarmaz.
| Paket | İçeriği |
|---|---|
core/database |
Her iki SQLite dosyasını açma ve migrasyon, sorgu yardımcıları, ayar ve olay yardımcıları, ortak satır alanları, geçmişi kırpma |
core/files |
Dosya ve klasör yardımcıları, boş disk alanı |
core/releasename |
Bir sürüm adından kalite, grup ve bölüm numaraları |
core/outbound |
Dış sunucuları çağırmanın tek yolu, adres denetimleriyle |
core/secrets |
Anahtar deposu ve anahtar döndürme |
core/logs |
Uygulama günlüğü ve çökme notları |
core/jobs |
İş kuyruğu, zamanlamalar ve çöküşten sonra yeniden başlayan döngüler |
core/webserver |
Router altyapısı, URL base, sıkıştırma, canlı gönderim |
core/startup |
Çalışma kullanıcısı, düşük bellek modu, bekletilen anahtarlar, bellek sınırı, modüller |
core/parts |
Her modülün sunmadan veya çalışmadan önce sorduğu modül anahtarları |
core/model |
Aktörler ve konular gibi ortak türler |
Core’un modül verisine dokunması gerekirse, modül wiring.go içinde core’a bir kanca kaydeder. Anahtar döndürme böyle çalışır.
Veri
| Dosya | İçeriği |
|---|---|
holyarrs.db |
Kütüphane, istekler, ayarlar ve önemli diğer her şey |
holyarrs-events.db |
Geçmiş ve diğer olay satırları. Büyür ve ana dosyaya dokunmadan kırpılır |
Migrasyonlar, core/database/migrations/main ve core/database/migrations/events içindeki numaralı SQL dosyalarıdır. Başlangıçta çalışırlar.
İlgili
İlgili bağlantısıHolyArrs ücretsiz. Zamanından tasarruf ettirdiyse GitHub'da yıldızla, sponsor ol ya da bana bir kahve ısmarla.