Gå til indhold

Moduler

Erfaren

Vælg det modul, din ændring hører til, og vid, hvilke moduler det må kalde.

  • Læs Arkitektur for mappekortet og reglerne.
  • Hvert modul har samme navn i app/backend/internal/<module>/, og i app/frontend/src/lib/<module>/ og app/tests/<module>/, når det har skærmbilleder eller browsertests.

Find det rigtige modul

Link til Find det rigtige modul
Modul Gør
requests Ønsker, godkendelser, ønskeregler, eksterne lister, rapporter
movies Filmtitler, udgaver, samlinger, søgning og oprydning
shows Serier, sæsoner, afsnit, søgning og oprydning
music Kunstnere, album, numre, søgning og oprydning
sources Kilder, Jackett- og Prowlarr-broen, søgning efter releases
downloads Downloadere, køen, sete filer, stikoblinger, tags, valg af kopi
subtitles Undertekstsprog, sider, matchning og gemning
discover Explore, Popular, Search, People, Calendar, titelsider
suggest Valg og sortering af rækker og hylder (kun backend)
mediafiles Katalogposter, udvalgsregler, navngivning, datapakker, mediedetaljer
importer Filimport: udpakning, tags, matchning (kun backend)
library Biblioteksmapper, overtagelse og omdøbning (kun backend)
metadata Klienten til eksterne data, musikopslag, aldersgrænsestiger, trailere
mediaservers At bede Plex, Jellyfin og Emby om at kigge igen
accounts Brugere, login, single sign-on, login til AI-apps, børnegrænser, visningsvalg
alerts Beskedkanaler og hvornår de siger noget
migrate At tage data med over fra tidligere apps
arrapi API’et i Sonarr- og Radarr-stil
ai Forbindelser til AI-apps (tilbageholdt)
backups At lave, gemme og gendanne backups
health Tilstandstjek, doktoren, supportpakken
updates Opdateringstjekket og den signerede opdateringsliste
setup Guiden ved første start

Et modul importerer kun et lavere lag. Intet importerer discover. tools/structurecheck/allow.go er den, der gælder.

Lag 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

Hvis dit modul har brug for noget fra et højere lag, så importer det ikke. Lad det højere modul sende almindelige data ned, eller definer en lille grænseflade i det lavere, som wiring.go udfylder.

Tilføj en rute eller et modul

Link til Tilføj en rute eller et modul

Registrer den i modulets routes.go med dens rettighed. openapi.json bliver lavet ud fra ruterne, og en test fejler, hvis de glider fra hinanden. Udgivne stier og feltnavne består. Tilføj felter, omdøb dem aldrig. Skriv så API-ruter om med go run ./app/backend/tools/apidoc.

Prøv først at få din ændring til at passe ind i de 23, og åbn en issue, før du tilføjer et. Et nyt modul skal have sin backend-mappe (plus lib/<module>/ og app/tests/<module>/, hvis det har skærmbilleder), en plads i lagrækkefølgen i tools/structurecheck og en linje i wiring.go.

Hvis det ikke virker

Link til Hvis det ikke virker

Symptom. TestModuleEdges fejler. Årsag. Et modul importerer et på samme eller et højere lag. Løsning. Send almindelige data ned fra det højere modul, eller tilføj en lille grænseflade, der kobles i wiring.go.

Symptom. TestSQLOnlyInStore eller TestTableOwnership fejler. Årsag. SQL ligger uden for en store*.go-fil eller rører et andet moduls tabel. Løsning. Flyt forespørgslen over i ejerens store, og kald ejerens service med ID.

Flere regler
  • Et modul importerer kun rodpakken i et andet modul.
  • Store-funktioner tager en database.Querier. Læs et andet moduls rækker gennem dets service med ID, og send lange ID-lister som ét JSON-array med json_each(?).
  • settings, schedules, secrets, jobs og events tilhører core. Hver indstillingsgruppe har ét ejermodul. Hvis du vil ændre et andet moduls gruppe, så kald dets ejer.
  • Alle kald udad går gennem core/outbound.
  • Core-pakker ligger i rækker, oppefra og ned: parts, webserver og startup, logs, jobs og model, outbound og secrets, så database, files og releasename. En core-pakke importerer kun sin egen række eller en lavere.
  • Navne: Go-filer er med små bogstaver og understreger, Svelte-dele er PascalCase, og TypeScript-, dokumentations-, test- og deploy-filer er kebab-case. Python-filer bruger understreger, så de kan importeres. Mapper i app/ er med små bogstaver, ét ord.
  • Omdøb kode frit, men alt, der er gemt eller sendt, beholder sit navn: tabeller og kolonner, indstillingsnøgler, JSON-felter, opgavenavne og kontaktnavne.
  • Kommentarer har ingen køreplansnumre, datoer, navne eller tankestreger.
Ejere af records
Ejer Records
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 og de fælles rækkefelter
Tjekkene

Tjekkene ligger i app/backend/tools/structurecheck. De fleste kræver -tags structure.

Tjek Sikrer
TestTopLayout Mapperne øverst i repoet
TestModuleSet, TestCoreSet, TestPackageMap Mapper tilladt i internal/ og internal/core/
TestModuleEdges Lagrækkefølge
TestModuleImportsRootOnly Kun import af rodpakker
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core-importer, rækkefølge og navne
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Placering af SQL og ejere af tabeller
TestGoFileNames, TestNoBannedPackageNames Fil- og pakkenavne
TestFileSizeCap, TestCorePackageSize Størrelse på filer og core-pakker
TestCommentHygiene Kommentarreglerne ovenfor
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged En flytning ændrer ingen rute, migrering, HTTP-headernavn eller JSON-nøgle
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Gamle sideadresser forbliver væk fra kode, tests og dokumentation
TestNoDependencyBotConfig Ingen fil til en afhængighedsbot i .github

HolyArrs er gratis. Hvis det sparede dig tid, kan du give det en stjerne på GitHub, sponsorere det eller give mig en kop kaffe.