Module
Expert
Alege modulul în care intră schimbarea ta și află ce module poate apela.
Înainte să începi
Link către Înainte să începi- Citește Arhitectura pentru harta dosarelor și reguli.
- Fiecare modul are același nume în
app/backend/internal/<module>/, și înapp/frontend/src/lib/<module>/șiapp/tests/<module>/când are ecrane sau teste în browser.
Găsește modulul potrivit
Link către Găsește modulul potrivit| Modul | Face |
|---|---|
requests |
Cereri, aprobări, reguli pentru cereri, liste externe, rapoarte |
movies |
Titluri de filme, ediții, seturi, căutare și organizare |
shows |
Seriale, sezoane, episoade, căutare și organizare |
music |
Artiști, albume, piese, căutare și organizare |
sources |
Surse, puntea Jackett și Prowlarr, căutarea de variante |
downloads |
Programe de descărcare, coada, fișiere văzute, mapări de căi, etichete, alegeri de copii |
subtitles |
Limbi de subtitrări, site-uri, potrivire și salvare |
discover |
Explore, Popular, Search, People, Calendar, paginile de titlu |
suggest |
Alegerea și ordonarea rândurilor și rafturilor (doar backend) |
mediafiles |
Înregistrări de catalog, reguli de alegere, denumire, pachete de date, detalii media |
importer |
Importul de fișiere: despachetare, etichete, potrivire (doar backend) |
library |
Dosarele Bibliotecii, preluare și redenumire (doar backend) |
metadata |
Clientul de date externe, căutări de muzică, scări de clasificare, trailere |
mediaservers |
A spune lui Plex, Jellyfin și Emby să caute din nou |
accounts |
Utilizatori, conectare, autentificare unică, conectare pentru aplicații AI, limite pentru copii, alegeri de vizionare |
alerts |
Canalele de alerte și când vorbesc |
migrate |
Aducerea datelor din aplicații mai vechi |
arrapi |
API-ul în stilul Sonarr și Radarr |
ai |
Conexiuni cu aplicații AI (reținut) |
backups |
Crearea, păstrarea și restaurarea copiilor de rezervă |
health |
Verificări de sănătate, doctorul, pachetul de suport |
updates |
Verificarea actualizărilor și lista semnată de actualizări |
setup |
Asistentul de la prima pornire |
Ordinea straturilor
Link către Ordinea straturilorUn modul importă doar de pe un strat mai jos. Nimic nu importă discover. tools/structurecheck/allow.go este sursa de adevăr.
| Strat | Module |
|---|---|
| 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 |
Dacă modulul tău are nevoie de ceva de pe un strat mai sus, nu-l importa. Fă ca modulul de sus să trimită în jos date simple, sau definește în cel de jos o interfață mică pe care o completează wiring.go.
Adaugă o rută sau un modul
Link către Adaugă o rută sau un modulRută nouă
Link către Rută nouăÎnregistrează-o în routes.go al modulului, cu permisiunea ei. openapi.json vine din rute, iar un test eșuează dacă apare o diferență. Căile și numele de câmpuri deja publicate rămân. Adaugă câmpuri, nu le redenumi. Apoi rescrie Rutele API cu go run ./app/backend/tools/apidoc.
Modul nou
Link către Modul nouÎncearcă mai întâi să-ți potrivești schimbarea în cele 23 existente și deschide o problemă înainte să adaugi unul. Un modul nou are nevoie de dosarul lui de backend (plus lib/<module>/ și app/tests/<module>/ dacă are ecrane), un loc în ordinea straturilor din tools/structurecheck și o linie în wiring.go.
Dacă nu merge
Link către Dacă nu mergeSimptom. TestModuleEdges eșuează.
Cauză. Un modul importă unul de pe același strat sau de pe unul mai sus.
Soluție. Trimite în jos date simple din modulul de sus, sau adaugă o interfață mică legată în wiring.go.
Simptom. TestSQLOnlyInStore sau TestTableOwnership eșuează.
Cauză. SQL stă în afara unui fișier store*.go, sau atinge tabelul altui modul.
Soluție. Mută interogarea în depozitul proprietarului și apelează serviciul proprietarului după ID.
Pentru experți
Link către Pentru experțiMai multe reguli
- Un modul importă doar pachetul de bază al altui modul.
- Funcțiile de depozit primesc un
database.Querier. Citește rândurile altui modul prin serviciul lui, după ID, și trimite listele lungi de ID-uri ca o singură matrice JSON cujson_each(?). settings,schedules,secrets,jobsșieventsaparțin lui core. Fiecare grup de setări are un singur modul proprietar. Ca să schimbi grupul altui modul, apelează proprietarul lui.- Orice apel spre exterior trece prin
core/outbound. - Pachetele core stau pe rânduri, de sus în jos:
parts,webserverșistartup,logs,jobsșimodel,outboundșisecrets, apoidatabase,filesșireleasename. Un pachet core importă doar de pe rândul lui sau de mai jos. - Nume: fișierele Go sunt cu litere mici și liniuțe jos, părțile Svelte sunt PascalCase, iar fișierele TypeScript, de documentație, de teste și de deploy sunt kebab-case. Fișierele Python folosesc liniuțe jos, ca să poată fi importate. Dosarele din
app/sunt cu litere mici, un singur cuvânt. - Redenumește codul liber, dar tot ce e stocat sau trimis își păstrează numele: tabele și coloane, chei de setări, câmpuri JSON, nume de sarcini și nume de comutatoare.
- Comentariile nu poartă numere din foaia de parcurs, date, nume sau liniuțe lungi (em dash).
Proprietarii înregistrărilor
| Proprietar | Înregistrări |
|---|---|
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 și câmpurile comune de rând |
Verificările
Verificările stau în app/backend/tools/structurecheck. Majoritatea cer -tags structure.
| Verificare | Păzește |
|---|---|
TestTopLayout |
Dosarele de sus din depozit |
TestModuleSet, TestCoreSet, TestPackageMap |
Dosarele permise în internal/ și internal/core/ |
TestModuleEdges |
Ordinea straturilor |
TestModuleImportsRootOnly |
Importuri doar din pachetul de bază |
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable |
Importurile core, ordinea rândurilor și numele |
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist |
Locul SQL-ului și proprietarii tabelelor |
TestGoFileNames, TestNoBannedPackageNames |
Numele fișierelor și pachetelor |
TestFileSizeCap, TestCorePackageSize |
Mărimea fișierelor și a pachetelor core |
TestCommentHygiene |
Regulile de mai sus pentru comentarii |
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged |
O mutare nu schimbă nicio rută, migrare, nume de antet HTTP sau cheie JSON |
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs |
Vechile adrese de pagini rămân dispărute din cod, teste și documentație |
TestNoDependencyBotConfig |
Niciun fișier de bot pentru dependențe în .github |
Vezi și
Link către Vezi șiHolyArrs este gratuit. Dacă ți-a economisit timp, dă-i o stea pe GitHub, sponsorizează-l sau cumpără-mi o cafea.