Hoppa till innehåll

Moduler

Expert

Välj modulen din ändring hör hemma i, och ta reda på vilka moduler den får anropa.

  • Läs Arkitektur för mappkartan och reglerna.
  • Varje modul har samma namn i app/backend/internal/<module>/, och i app/frontend/src/lib/<module>/ och app/tests/<module>/ när den har skärmar eller webbläsartester.
Modul Ansvarar för
requests Förfrågningar, godkännanden, förfrågningsregler, externa listor, rapporter
movies Filmtitlar, utgåvor, samlingar, sökning och organisering
shows Serier, säsonger, avsnitt, sökning och organisering
music Artister, album, spår, sökning och organisering
sources Källor, bryggan till Jackett och Prowlarr, release-sökning
downloads Nedladdare, kön, sedda filer, sökvägsmappningar, taggar, kopieval
subtitles Undertextspråk, sidor, matchning och sparande
discover Utforska, Populärt, Sök, Personer, Kalender, titelsidor
suggest Urval och sortering av rader och hyllor (bara backend)
mediafiles Katalogposter, urvalsregler, namngivning, datapaket, mediadetaljer
importer Filimport: uppackning, taggar, matchning (bara backend)
library Biblioteksmappar, övertagande och namnbyte (bara backend)
metadata Klienten för externa data, musikuppslag, åldersgränsskalor, trailers
mediaservers Att säga åt Plex, Jellyfin och Emby att titta igen
accounts Användare, inloggning, single sign-on, inloggning för AI-appar, barngränser, visningsval
alerts Aviseringskanaler och när de hörs av
migrate Att föra över data från tidigare appar
arrapi API:et i Sonarr- och Radarr-stil
ai Anslutningar för AI-appar (tillbakahållen)
backups Att göra, spara och återställa backuper
health Hälsokontroller, doktorn, supportpaketet
updates Uppdateringskontrollen och den signerade uppdateringslistan
setup Guiden vid första start

En modul importerar bara ett lägre lager. Ingenting importerar discover. tools/structurecheck/allow.go är den enda källan till sanning.

Lager Moduler
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

Om din modul behöver något från ett högre lager ska du inte importera det. Låt den högre modulen skicka ner vanlig data, eller definiera ett litet gränssnitt i den lägre som wiring.go fyller i.

Lägg till en route eller en modul

Länk till Lägg till en route eller en modul

Registrera den i modulens routes.go med dess behörighet. openapi.json kommer från routerna, och ett test misslyckas om de glider isär. Släppta sökvägar och fältnamn finns kvar. Lägg till fält, byt aldrig namn på dem. Skriv sedan om API-routes med go run ./app/backend/tools/apidoc.

Få först in din ändring i de 23 som finns, och öppna ett ärende innan du lägger till en. En ny modul behöver sin backend-mapp (plus lib/<module>/ och app/tests/<module>/ om den har skärmar), en plats i lagerordningen i tools/structurecheck och en rad i wiring.go.

Symptom. TestModuleEdges misslyckas. Orsak. En modul importerar en på samma eller ett högre lager. Lösning. Skicka ner vanlig data från den högre modulen, eller lägg till ett litet gränssnitt som kopplas in i wiring.go.

Symptom. TestSQLOnlyInStore eller TestTableOwnership misslyckas. Orsak. SQL ligger utanför en store*.go-fil, eller rör en annan moduls tabell. Lösning. Flytta frågan till ägarens store och anropa ägarens tjänst med ID.

Fler regler
  • En modul importerar bara rotpaketet i en annan modul.
  • Store-funktioner tar en database.Querier. Läs en annan moduls rader via dess tjänst med ID, och skicka långa ID-listor som en enda JSON-array med json_each(?).
  • settings, schedules, secrets, jobs och events tillhör core. Varje inställningsgrupp har en ägarmodul. För att ändra en annan moduls grupp anropar du dess ägare.
  • Varje anrop utåt går genom core/outbound.
  • Core-paketen ligger i rader, uppifrån och ner: parts, webserver och startup, logs, jobs och model, outbound och secrets, sedan database, files och releasename. Ett core-paket importerar bara sin egen rad eller en lägre.
  • Namn: Go-filer är gemena med understreck, Svelte-delar är PascalCase, och TypeScript, dokument, tester och deploy-filer är kebab-case. Python-filer använder understreck så att de kan importeras. Mappar i app/ är gemena, ett ord.
  • Byt gärna namn på kod, men allt som lagras eller skickas behåller sitt namn: tabeller och kolumner, nyckelnamn för inställningar, JSON-fält, jobbnamn och reglagenamn.
  • Kommentarer innehåller inga färdplansnummer, datum, namn eller långa tankstreck.
Postägare
Ägare Poster
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 och de delade radfälten
Kontrollerna

Kontrollerna finns i app/backend/tools/structurecheck. De flesta kräver -tags structure.

Kontroll Säkerställer
TestTopLayout Översta mapparna i repot
TestModuleSet, TestCoreSet, TestPackageMap Mappar som får finnas i internal/ och internal/core/
TestModuleEdges Lagerordning
TestModuleImportsRootOnly Import av bara rotpaket
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core-importer, radordning och namn
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Var SQL ligger och vem som äger tabellerna
TestGoFileNames, TestNoBannedPackageNames Fil- och paketnamn
TestFileSizeCap, TestCorePackageSize Fil- och core-paketstorlek
TestCommentHygiene Kommentarsreglerna ovan
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged En flytt ändrar ingen route, migrering, HTTP-headernamn eller JSON-nyckel
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Gamla sidadresser förblir borta ur kod, tester och dokument
TestNoDependencyBotConfig Ingen fil för beroendebot i .github

HolyArrs är gratis. Om det sparade dig tid kan du ge det en stjärna på GitHub, sponsra det eller bjuda mig på en kaffe.