Preskoči na sadržaj

Moduli

Napredno

Odaberi modul kojem tvoja promjena pripada i znaj koje module smije zvati.

  • Pročitaj Arhitekturu za kartu mapa i pravila.
  • Svaki modul ima isto ime u app/backend/internal/<module>/, te u app/frontend/src/lib/<module>/ i app/tests/<module>/ kad ima ekrane ili testove u pregledniku.
Modul Radi
requests Traženje, odobrenja, pravila zahtjeva, vanjski popisi, prijave
movies Filmske naslove, izdanja, setove, pretragu i uređivanje
shows Serije, sezone, epizode, pretragu i uređivanje
music Izvođače, albume, pjesme, pretragu i uređivanje
sources Izvore, most prema Jackettu i Prowlarru, pretragu releasea
downloads Preuzimatelje, red, viđene datoteke, mapiranje putanja, tagove, izbor kopija
subtitles Jezike titlova, stranice, povezivanje i spremanje
discover Istraži, Popularno, Pretragu, Ljude, Kalendar, stranice naslova
suggest Biranje i slaganje redova i polica (samo backend)
mediafiles Zapise kataloga, pravila odabira, imenovanje, pakete podataka, detalje medija
importer Uvoz datoteka: raspakiravanje, tagove, povezivanje (samo backend)
library Mape biblioteke, usvajanje i preimenovanje (samo backend)
metadata Klijent za vanjske podatke, upite za glazbu, ljestvice ocjena, trailere
mediaservers Javljanje Plexu, Jellyfinu i Embyju da ponovno pogledaju
accounts Korisnike, prijavu, single sign-on, prijavu za AI aplikacije, dječja ograničenja, izbore gledanja
alerts Kanale za obavijesti i kada se oglašavaju
migrate Prijenos podataka iz dosadašnjih aplikacija
arrapi API u stilu Sonarra i Radarra
ai Veze s AI aplikacijama (zadržano)
backups Izradu, čuvanje i vraćanje backupa
health Provjere stanja, doktora, paket za podršku
updates Provjeru ažuriranja i potpisani popis ažuriranja
setup Čarobnjak za prvo pokretanje

Modul uvozi samo niži sloj. Nitko ne uvozi discover. tools/structurecheck/allow.go je izvor istine.

Sloj Moduli
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

Ako tvom modulu treba nešto s višeg sloja, nemoj ga uvoziti. Neka viši modul preda obične podatke prema dolje, ili definiraj malo sučelje u nižem koje wiring.go popuni.

Registriraj je u routes.go modula s njezinom dozvolom. openapi.json nastaje iz ruta, a test ruši build kad se razilaze. Objavljene putanje i imena polja ostaju. Dodaj polja, nikad ih ne preimenuj. Zatim ponovno napiši API rute naredbom go run ./app/backend/tools/apidoc.

Prvo uklopi promjenu u postojećih 23 i otvori issue prije nego dodaš novi. Novom modulu treba backend mapa (plus lib/<module>/ i app/tests/<module>/ ako ima ekrane), mjesto u redoslijedu slojeva u tools/structurecheck i redak u wiring.go.

Simptom. TestModuleEdges ne prolazi. Uzrok. Modul uvozi drugi s istog ili višeg sloja. Rješenje. Predaj obične podatke prema dolje iz višeg modula ili dodaj malo sučelje spojeno u wiring.go.

Simptom. TestSQLOnlyInStore ili TestTableOwnership ne prolazi. Uzrok. SQL je izvan store*.go datoteke ili dira tablicu drugog modula. Rješenje. Premjesti upit u store vlasnika i pozovi service vlasnika preko ID-a.

Još pravila
  • Modul uvozi samo korijenski paket drugog modula.
  • Funkcije storea primaju database.Querier. Retke drugog modula čitaj preko njegovog servicea po ID-u, a duge popise ID-ova predaj kao jedan JSON array s json_each(?).
  • settings, schedules, secrets, jobs i events pripadaju coreu. Svaka skupina postavki ima jednog modula vlasnika. Za promjenu skupine drugog modula pozovi njegovog vlasnika.
  • Svaki vanjski poziv ide kroz core/outbound.
  • Core paketi stoje u recima, od vrha prema dnu: parts, webserver i startup, logs, jobs i model, outbound i secrets, pa database, files i releasename. Core paket uvozi samo iz svog reda ili nižeg.
  • Imena: Go datoteke su malim slovima s podcrtama, Svelte dijelovi su PascalCase, a TypeScript, dokumentacija, testovi i deploy datoteke su kebab-case. Python datoteke koriste podcrte da se mogu uvoziti. Mape u app/ su malim slovima, jedna riječ.
  • Kod slobodno preimenuj, ali sve što se sprema ili šalje zadržava ime: tablice i stupce, ključeve postavki, JSON polja, imena zadataka i imena prekidača.
  • Komentari ne nose brojeve iz roadmapa, datume, imena ni duge crtice.
Vlasnici zapisa
Vlasnik Zapisi
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 zajednička polja redaka
Provjere

Provjere su u app/backend/tools/structurecheck. Većina traži -tags structure.

Provjera Drži
TestTopLayout Gornje mape repozitorija
TestModuleSet, TestCoreSet, TestPackageMap Mape dopuštene u internal/ i internal/core/
TestModuleEdges Redoslijed slojeva
TestModuleImportsRootOnly Uvoze samo korijenskog paketa
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core uvoze, redoslijed redova i imena
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Smještaj SQL-a i vlasnike tablica
TestGoFileNames, TestNoBannedPackageNames Imena datoteka i paketa
TestFileSizeCap, TestCorePackageSize Veličinu datoteka i core paketa
TestCommentHygiene Gornja pravila za komentare
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged Premještanje ne mijenja rutu, migraciju, ime HTTP headera ni JSON ključ
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Stare adrese stranica ostaju izvan koda, testova i dokumentacije
TestNoDependencyBotConfig Nema datoteke dependency bota u .github

HolyArrs je besplatan. Ako ti je uštedio vrijeme, daj mu zvjezdicu na GitHubu, podrži ga ili počasti me kavom.