Sari la conținut

Module

Expert

Alege modulul în care intră schimbarea ta și află ce module poate apela.

  • Citește Arhitectura pentru harta dosarelor și reguli.
  • Fiecare modul are același nume în app/backend/internal/<module>/, și în app/frontend/src/lib/<module>/ și app/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

Un 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 modul

Î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.

Î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.

Simptom. 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.

Mai 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 cu json_each(?).
  • settings, schedules, secrets, jobs și events aparț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 și startup, logs, jobs și model, outbound și secrets, apoi database, files și releasename. 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

HolyArrs este gratuit. Dacă ți-a economisit timp, dă-i o stea pe GitHub, sponsorizează-l sau cumpără-mi o cafea.