İçeriğe geç

Modüller

Uzman

Değişikliğinin hangi modüle ait olduğunu seç ve hangi modülleri çağırabileceğini bil.

  • Klasör haritası ve kurallar için Mimari sayfasını oku.
  • Her modül app/backend/internal/<module>/ içinde aynı adı taşır. Ekranları ya da tarayıcı testleri varsa app/frontend/src/lib/<module>/ ve app/tests/<module>/ içinde de aynı adla bulunur.
Modül Ne yapar
requests İstemek, onaylar, istek kuralları, dış listeler, raporlar
movies Film başlıkları, baskılar, setler, arama ve düzenleme
shows Diziler, sezonlar, bölümler, arama ve düzenleme
music Sanatçılar, albümler, parçalar, arama ve düzenleme
sources Kaynaklar, Jackett ve Prowlarr köprüsü, sürüm adayı arama
downloads İndiriciler, kuyruk, görülen dosyalar, yol eşlemeleri, etiketler, kopya seçimleri
subtitles Altyazı dilleri, siteler, eşleştirme ve kaydetme
discover Explore, Popular, Search, People, Calendar, başlık sayfaları
suggest Satırları ve rafları seçme ve sıralama (yalnızca backend)
mediafiles Katalog kayıtları, seçim kuralları, adlandırma, veri paketleri, medya ayrıntıları
importer Dosya içe aktarma: arşivden çıkarma, etiketler, eşleştirme (yalnızca backend)
library Kütüphane klasörleri, sahiplenme ve yeniden adlandırma (yalnızca backend)
metadata Dış veri istemcisi, müzik aramaları, yaş sınırı kademeleri, fragmanlar
mediaservers Plex, Jellyfin ve Emby’ye yeniden bakmasını söyleme
accounts Kullanıcılar, giriş, tek oturum açma, AI uygulaması girişi, çocuk limitleri, izleme tercihleri
alerts Uyarı kanalları ve ne zaman konuştukları
migrate Eski uygulamalardan veri getirme
arrapi Sonarr ve Radarr tarzı API
ai AI uygulaması bağlantıları (bekletiliyor)
backups Yedek alma, saklama ve geri yükleme
health Sağlık denetimleri, doctor, destek paketi
updates Güncelleme denetimi ve imzalı güncelleme listesi
setup İlk açılış sihirbazı

Bir modül yalnızca alt bir katmanı içe aktarır. Hiçbir şey discover modülünü içe aktarmaz. Esas kaynak tools/structurecheck/allow.go dosyasıdır.

Katman Modüller
0 core
1 metadata, suggest
2 accounts
3 mediafiles
4 importer
5 library
6 sources
7 downloads
8 subtitles, mediaservers, alerts
9 movies, shows
10 requests, health
11 music, arrapi, migrate, ai, backups, updates, setup
13 discover

Modülünün üst bir katmandan bir şeye ihtiyacı varsa onu içe aktarma. Üstteki modülün düz veriyi aşağı geçirmesini sağla ya da alttaki modülde küçük bir arayüz tanımla ve bunu wiring.go doldursun.

Bunu modülün routes.go dosyasında izniyle birlikte kaydet. openapi.json rotalardan üretilir ve kayma olursa bir test başarısız olur. Yayımlanmış yollar ve alan adları aynı kalır. Alan ekle, asla yeniden adlandırma. Sonra API rotaları sayfasını go run ./app/backend/tools/apidoc ile yeniden yaz.

Önce değişikliğini mevcut 23 modüle sığdırmaya çalış, yenisini eklemeden önce bir issue aç. Yeni bir modülün backend klasörü (ekranları varsa ayrıca lib/<module>/ ve app/tests/<module>/), tools/structurecheck içindeki katman sırasında bir yeri ve wiring.go içinde bir satırı olmalı.

Belirti. TestModuleEdges başarısız oluyor. Neden. Bir modül, aynı ya da daha üst katmandaki birini içe aktarıyor. Çözüm. Üstteki modülden düz veri geçir ya da wiring.go içinde bağlanan küçük bir arayüz ekle.

Belirti. TestSQLOnlyInStore veya TestTableOwnership başarısız oluyor. Neden. SQL bir store*.go dosyasının dışında duruyor ya da başka bir modülün tablosuna dokunuyor. Çözüm. Sorguyu sahibinin store’una taşı ve sahibinin servisini ID ile çağır.

Daha fazla kural
  • Bir modül, başka bir modülün yalnızca kök paketini içe aktarır.
  • Store fonksiyonları bir database.Querier alır. Başka bir modülün satırlarını servisi üzerinden ID ile oku ve uzun ID listelerini json_each(?) ile tek bir JSON dizisi olarak geçir.
  • settings, schedules, secrets, jobs ve events core’a aittir. Her ayar grubunun tek bir sahip modülü vardır. Başka bir modülün grubunu değiştirmek için sahibini çağır.
  • Dışarıya giden her çağrı core/outbound üzerinden geçer.
  • Core paketleri yukarıdan aşağıya satırlar halinde durur: parts, webserver ve startup, logs, jobs ve model, outbound ve secrets, sonra database, files ve releasename. Bir core paketi yalnızca kendi satırını ya da daha aşağıdakileri içe aktarır.
  • Adlar: Go dosyaları küçük harfli ve alt çizgilidir, Svelte parçaları PascalCase’tir, TypeScript, doküman, test ve deploy dosyaları kebab-case’tir. Python dosyaları içe aktarılabilsin diye alt çizgi kullanır. app/ içindeki klasörler küçük harfli ve tek kelimedir.
  • Kodu istediğin gibi yeniden adlandır, ama saklanan ya da gönderilen her şey adını korur: tablolar ve sütunlar, ayar anahtarları, JSON alanları, iş adları ve anahtar adları.
  • Yorumlarda yol haritası numarası, tarih, isim veya uzun tire olmaz.
Kayıt sahipleri
Sahip Kayıtlar
mediafiles Title, Item, Version, Slot, Part, File, LibraryFolder, Quality, PickRules
downloads Download, Downloader, SeenFile, PathMap
sources Source, Release
requests Ask, Report
accounts User
core/jobs Job, Schedule, JobError
core/database Event ve ortak satır alanları
Denetimler

Denetimler app/backend/tools/structurecheck içinde durur. Çoğu -tags structure ister.

Denetim Neyi tutar
TestTopLayout Repo’nun üst klasörleri
TestModuleSet, TestCoreSet, TestPackageMap internal/ ve internal/core/ içinde izin verilen klasörler
TestModuleEdges Katman sırası
TestModuleImportsRootOnly Yalnızca kök paket importları
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core importları, satır sırası ve adlar
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist SQL yerleşimi ve tablo sahipleri
TestGoFileNames, TestNoBannedPackageNames Dosya ve paket adları
TestFileSizeCap, TestCorePackageSize Dosya ve core paket boyutu
TestCommentHygiene Yukarıdaki yorum kuralları
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged Bir taşıma hiçbir rotayı, migrasyonu, HTTP başlık adını ya da JSON anahtarını değiştirmez
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Eski sayfa adresleri kodda, testlerde ve dokümanlarda geri gelmez
TestNoDependencyBotConfig .github içinde bağımlılık botu dosyası yok

HolyArrs ücretsiz. Zamanından tasarruf ettirdiyse GitHub'da yıldızla, sponsor ol ya da bana bir kahve ısmarla.