Modüller
Uzman
Değişikliğinin hangi modüle ait olduğunu seç ve hangi modülleri çağırabileceğini bil.
Başlamadan önce
Başlamadan önce bağlantısı- 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 varsaapp/frontend/src/lib/<module>/veapp/tests/<module>/içinde de aynı adla bulunur.
Doğru modülü bul
Doğru modülü bul bağlantısı| 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ı |
Katman sırası
Katman sırası bağlantısı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.
Rota ya da modül ekle
Rota ya da modül ekle bağlantısıYeni rota
Yeni rota bağlantısı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.
Yeni modül
Yeni modül bağlantısıÖ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ı.
Çalışmazsa
Çalışmazsa bağlantısı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.
Uzmanlar için
Uzmanlar için bağlantısı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.Querieralır. Başka bir modülün satırlarını servisi üzerinden ID ile oku ve uzun ID listelerinijson_each(?)ile tek bir JSON dizisi olarak geçir. settings,schedules,secrets,jobsveeventscore’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,webservervestartup,logs,jobsvemodel,outboundvesecrets, sonradatabase,filesvereleasename. 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 |
İlgili
İlgili bağlantısıHolyArrs ücretsiz. Zamanından tasarruf ettirdiyse GitHub'da yıldızla, sponsor ol ya da bana bir kahve ısmarla.