Tovább a tartalomhoz

Modulok

Haladó

Válaszd ki a modult, amelyikbe a változtatásod tartozik, és tudd, mely modulokat hívhatja.

  • Olvasd el az Architektúra oldalt a mappatérképért és a szabályokért.
  • Minden modul ugyanazzal a névvel szerepel az app/backend/internal/<module>/ mappában, és az app/frontend/src/lib/<module>/ és app/tests/<module>/ mappában is, ha vannak képernyői vagy böngészős tesztjei.
Modul Feladata
requests Kérés, jóváhagyás, kérési szabályok, külső listák, jelentések
movies Filmcímek, kiadások, gyűjtemények, keresés és rendezés
shows Sorozatok, évadok, epizódok, keresés és rendezés
music Előadók, albumok, számok, keresés és rendezés
sources Források, a Jackett és Prowlarr híd, Release-keresés
downloads Letöltők, a sor, látott fájlok, útvonal-leképezések, tagek, másolatválasztás
subtitles Feliratnyelvek, oldalak, párosítás és mentés
discover Felfedezés, Népszerű, Keresés, Személyek, Naptár, címoldalak
suggest Sorok és polcok kiválasztása és rendezése (csak backend)
mediafiles Katalógusrekordok, választási szabályok, elnevezés, adatcsomagok, médiaadatok
importer Fájlimportálás: kicsomagolás, tagek, párosítás (csak backend)
library Médiatár-mappák, átvétel és átnevezés (csak backend)
metadata A külső adatok kliense, zenei keresések, korhatár-skálák, trailerek
mediaservers A Plex, a Jellyfin és az Emby értesítése, hogy nézzenek újra
accounts Felhasználók, bejelentkezés, Single Sign-on, AI app bejelentkezés, gyerekkorlátok, nézési beállítások
alerts Értesítési csatornák és hogy mikor szólalnak meg
migrate Adatok átvétele a korábbi appokból
arrapi A Sonarr- és Radarr-stílusú API
ai AI app kapcsolatok (későbbre halasztva)
backups Backupok készítése, megőrzése és visszaállítása
health Állapotellenőrzések, a doctor, a támogatási csomag
updates A frissítésellenőrzés és az aláírt frissítési lista
setup Az első indítás varázslója

Egy modul csak alacsonyabb réteget importál. A discover-t semmi nem importálja. A tools/structurecheck/allow.go az irányadó forrás.

Réteg Modulok
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

Ha a modulodnak valami kell egy magasabb rétegből, ne importáld. Add át a magasabb modullal a sima adatot lefelé, vagy definiálj az alsóban egy kis interfészt, amit a wiring.go tölt ki.

Regisztráld a modul routes.go fájljában a jogosultságával együtt. Az openapi.json a route-okból készül, és egy teszt elbukik, ha eltérés van. A kiadott útvonalak és mezőnevek maradnak. Mezőt hozzáadni szabad, átnevezni nem. Ezután írd újra az API route-ok oldalt a go run ./app/backend/tools/apidoc paranccsal.

Először próbáld beilleszteni a változtatást a meglévő 23 közé, és nyiss egy issue-t, mielőtt újat adsz hozzá. Egy új modulhoz kell a backend mappája (meg a lib/<module>/ és az app/tests/<module>/, ha vannak képernyői), egy hely a rétegsorrendben a tools/structurecheck-ben, és egy sor a wiring.go-ban.

Tünet. A TestModuleEdges elbukik. Ok. Egy modul olyat importál, amelyik azonos vagy magasabb rétegben van. Megoldás. Add át a sima adatot lefelé a magasabb modulból, vagy adj hozzá egy kis interfészt, amit a wiring.go köt be.

Tünet. A TestSQLOnlyInStore vagy a TestTableOwnership elbukik. Ok. SQL van egy store*.go fájlon kívül, vagy másik modul táblájához nyúl. Megoldás. Told a lekérdezést a tulajdonos store-jába, és hívd a tulajdonos service-ét azonosító alapján.

További szabályok
  • Egy modul csak egy másik modul gyökércsomagját importálja.
  • A store függvények egy database.Querier-t kapnak. Más modul sorait a service-én át olvasd azonosító alapján, a hosszú azonosítólistákat pedig egyetlen JSON tömbként add át a json_each(?) segítségével.
  • A settings, schedules, secrets, jobs és events a core-hoz tartozik. Minden beállításcsoportnak egyetlen tulajdonos modulja van. Más modul csoportjának módosításához a tulajdonosát hívd.
  • Minden külső hívás a core/outbound-on megy át.
  • A core csomagok sorokban állnak, fentről lefelé: parts, webserver és startup, logs, jobs és model, outbound és secrets, végül database, files és releasename. Egy core csomag csak a saját sorát vagy alacsonyabbat importál.
  • Nevek: a Go fájlok kisbetűsek, aláhúzással, a Svelte részek PascalCase-ek, a TypeScript, a docs, a tesztek és a deploy fájlok kebab-case-ek. A Python fájlok aláhúzást használnak, hogy importálhatók legyenek. Az app/ mappái kisbetűsek, egy szavasak.
  • A kódot szabadon átnevezheted, de ami tárolva van vagy ki van küldve, az megtartja a nevét: táblák és oszlopok, beállításkulcsok, JSON mezők, feladatnevek és kapcsolónevek.
  • A kommentekben nincs roadmap-szám, dátum, név vagy gondolatjel.
Rekordtulajdonosok
Tulajdonos Rekordok
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 és a közös sormezők
Az ellenőrzések

Az ellenőrzések az app/backend/tools/structurecheck mappában vannak. A legtöbbhöz -tags structure kell.

Ellenőrzés Mit tart
TestTopLayout A repo felső szintű mappái
TestModuleSet, TestCoreSet, TestPackageMap Az internal/ és internal/core/ alatt engedett mappák
TestModuleEdges Rétegsorrend
TestModuleImportsRootOnly Csak gyökércsomag-importok
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core importok, sorrend és nevek
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Az SQL helye és a táblák tulajdonosai
TestGoFileNames, TestNoBannedPackageNames Fájl- és csomagnevek
TestFileSizeCap, TestCorePackageSize Fájl- és core csomagméret
TestCommentHygiene A fenti komment-szabályok
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged Az áthelyezés nem változtat route-ot, migrációt, HTTP-fejlécnevet vagy JSON-kulcsot
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs A régi oldalcímek nem kerülnek vissza a kódba, a tesztekbe és a docsba
TestNoDependencyBotConfig Nincs függőségi bot fájl a .github-ban

A HolyArrs ingyenes. Ha időt spórolt neked, adj neki egy csillagot a GitHubon, támogasd vagy hívj meg egy kávéra.