Gå til innholdet

Moduler

Ekspert

Velg modulen endringen din hører hjemme i, og vit hvilke moduler den kan kalle.

  • Les Arkitektur for mappekartet og reglene.
  • Hver modul har samme navn i app/backend/internal/<module>/, og i app/frontend/src/lib/<module>/ og app/tests/<module>/ når den har skjermbilder eller nettlesertester.
Modul Gjør
requests Å be om titler, godkjenninger, forespørselsregler, eksterne lister, rapporter
movies Filmtitler, utgaver, sett, søk og organisering
shows Serier, sesonger, episoder, søk og organisering
music Artister, album, låter, søk og organisering
sources Kilder, broen til Jackett og Prowlarr, release-søk
downloads Nedlastere, køen, kjente filer, stikoblinger, tagger, kopivalg
subtitles Undertekstspråk, sider, matching og lagring
discover Explore, Popular, Search, People, Calendar, tittelsider
suggest Valg og sortering av rader og hyller (bare backend)
mediafiles Katalogposter, valgregler, navngiving, datapakker, mediadetaljer
importer Filimport: utpakking, tagger, matching (bare backend)
library Bibliotekmapper, overtakelse og omdøping (bare backend)
metadata Klienten for data utenfra, musikkoppslag, aldersgrenser, trailere
mediaservers Å be Plex, Jellyfin og Emby om å se på nytt
accounts Brukere, innlogging, single sign-on, AI-app-innlogging, barnegrenser, visningsvalg
alerts Varselkanaler og når de melder fra
migrate Å hente over data fra tidligere apper
arrapi API-et i Sonarr- og Radarr-stil
ai Tilkoblinger til AI-apper (tilbakeholdt)
backups Å lage, beholde og gjenopprette backuper
health Helsesjekker, doctor, supportpakken
updates Oppdateringssjekken og den signerte oppdateringslisten
setup Veiviseren ved første oppstart

Rekkefølge på lagene

Lenke til Rekkefølge på lagene

En modul importerer bare et lavere lag. Ingenting importerer discover. tools/structurecheck/allow.go er fasiten.

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 modulen din trenger noe fra et høyere lag, ikke importer det. La den høyere modulen sende rene data ned, eller definer et lite grensesnitt i den lavere som wiring.go fyller inn.

Legg til en rute eller en modul

Lenke til Legg til en rute eller en modul

Registrer den i routes.go i modulen, med tillatelsen den trenger. openapi.json kommer fra rutene, og en test feiler ved avvik. Ruter og feltnavn som er utgitt, blir stående. Legg til felter, aldri gi dem nytt navn. Skriv så API-ruter på nytt med go run ./app/backend/tools/apidoc.

Få endringen til å passe inn i de 23 først, og åpne en sak før du legger til en. En ny modul trenger backend-mappen sin (pluss lib/<module>/ og app/tests/<module>/ hvis den har skjermbilder), en plass i rekkefølgen på lagene i tools/structurecheck og en linje i wiring.go.

Hvis det ikke fungerer

Lenke til Hvis det ikke fungerer

Symptom. TestModuleEdges feiler. Årsak. En modul importerer en på samme eller et høyere lag. Løsning. Send rene data ned fra den høyere modulen, eller legg til et lite grensesnitt som kobles i wiring.go.

Symptom. TestSQLOnlyInStore eller TestTableOwnership feiler. Årsak. SQL ligger utenfor en store*.go-fil, eller rører tabellen til en annen modul. Løsning. Flytt spørringen til store-filen til eieren og kall tjenesten til eieren med ID.

Flere regler
  • En modul importerer bare rotpakken til en annen modul.
  • Store-funksjoner tar en database.Querier. Les radene til en annen modul gjennom tjenesten dens med ID, og send lange ID-lister som én JSON-array med json_each(?).
  • settings, schedules, secrets, jobs og events hører til core. Hver innstillingsgruppe har én eiermodul. For å endre gruppen til en annen modul, kall eieren.
  • Alle kall til utsiden går gjennom core/outbound.
  • Core-pakker ligger i rader, fra topp til bunn: parts, webserver og startup, logs, jobs og model, outbound og secrets, så database, files og releasename. En core-pakke importerer bare sin egen rad eller lavere.
  • Navn: Go-filer er små bokstaver med understrek, Svelte-deler er PascalCase, og TypeScript-, doks-, test- og deploy-filer er kebab-case. Python-filer bruker understrek så de kan importeres. Mapper i app/ er små bokstaver, ett ord.
  • Gi kode nytt navn fritt, men alt som lagres eller sendes beholder navnet: tabeller og kolonner, innstillingsnøkler, JSON-felter, oppgavenavn og bryternavn.
  • Kommentarer har ingen veikartnumre, datoer, navn eller tankestreker.
Eiere av poster
Eier 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 og de felles radfeltene
Sjekkene

Sjekkene ligger i app/backend/tools/structurecheck. De fleste trenger -tags structure.

Sjekk Sikrer
TestTopLayout Mappene øverst i repoet
TestModuleSet, TestCoreSet, TestPackageMap Mapper som er tillatt i internal/ og internal/core/
TestModuleEdges Rekkefølgen på lagene
TestModuleImportsRootOnly Bare import av rotpakken
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Core-importer, radrekkefølge og navn
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Hvor SQL ligger og hvem som eier tabellene
TestGoFileNames, TestNoBannedPackageNames Fil- og pakkenavn
TestFileSizeCap, TestCorePackageSize Størrelse på filer og core-pakker
TestCommentHygiene Kommentarreglene over
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged En flytting endrer ingen rute, migrering, HTTP-headernavn eller JSON-nøkkel
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Gamle sideadresser blir borte fra kode, tester og doks
TestNoDependencyBotConfig Ingen fil for avhengighetsbot i .github

HolyArrs er gratis. Hvis det sparte deg tid, kan du gi det en stjerne på GitHub, sponse det eller spandere en kaffe.