Ga naar inhoud

Modules

Gevorderd

Kies de module waar je wijziging bij hoort en weet welke modules die mag aanroepen.

  • Lees Architectuur voor de mappenkaart en de regels.
  • Elke module heeft dezelfde naam in app/backend/internal/<module>/, en in app/frontend/src/lib/<module>/ en app/tests/<module>/ als ze schermen of browsertests heeft.

Zoek de juiste module

Link naar Zoek de juiste module
Module Doet
requests Aanvragen, goedkeuringen, aanvraagregels, externe lijsten, rapporten
movies Filmtitels, edities, reeksen, zoeken en ordenen
shows Series, seizoenen, afleveringen, zoeken en ordenen
music Artiesten, albums, nummers, zoeken en ordenen
sources Bronnen, de Jackett- en Prowlarr-brug, zoeken naar releases
downloads Downloaders, de wachtrij, geziene bestanden, padtoewijzingen, tags, kopiekeuzes
subtitles Ondertiteltalen, sites, koppelen en opslaan
discover Ontdekken, Populair, Zoeken, Personen, Agenda, titelpagina’s
suggest Rijen en planken kiezen en ordenen (alleen backend)
mediafiles Catalogusrecords, keuzeregels, naamgeving, datapakketten, mediadetails
importer Bestanden importeren: uitpakken, tags, koppelen (alleen backend)
library Bibliotheekmappen, overnemen en hernoemen (alleen backend)
metadata De client voor externe data, muziekopzoekingen, leeftijdsladders, trailers
mediaservers Plex, Jellyfin en Emby laten weten dat ze opnieuw moeten kijken
accounts Gebruikers, aanmelden, single sign-on, aanmelden voor de AI-app, kinderlimieten, kijkkeuzes
alerts Meldingskanalen en wanneer ze iets melden
migrate Data overzetten van eerdere apps
arrapi De API in de stijl van Sonarr en Radarr
ai Verbindingen met AI-apps (uitgesteld)
backups Backups maken, bewaren en terugzetten
health Gezondheidscontroles, de doctor, het ondersteuningspakket
updates De updatecontrole en de ondertekende updatelijst
setup De wizard voor de eerste start

Een module importeert alleen een lagere laag. Niets importeert discover. tools/structurecheck/allow.go is de bron van de waarheid.

Laag Modules
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

Heeft je module iets nodig van een hogere laag, importeer het dan niet. Laat de hogere module gewone data naar beneden doorgeven, of definieer in de lagere een kleine interface die wiring.go invult.

Een route of een module toevoegen

Link naar Een route of een module toevoegen

Registreer de route in de routes.go van de module, met het recht dat ze nodig heeft. openapi.json komt uit de routes en een test mislukt bij afwijkingen. Routes en veldnamen die al zijn uitgebracht, blijven. Voeg velden toe, hernoem ze nooit. Schrijf daarna API-routes opnieuw met go run ./app/backend/tools/apidoc.

Pas je wijziging eerst in de 23 bestaande in, en open een issue voordat je er een toevoegt. Een nieuwe module heeft een eigen backendmap nodig (plus lib/<module>/ en app/tests/<module>/ als ze schermen heeft), een plek in de laagvolgorde in tools/structurecheck en een regel in wiring.go.

Symptoom. TestModuleEdges mislukt. Oorzaak. Een module importeert er een op dezelfde of een hogere laag. Oplossing. Geef gewone data door vanuit de hogere module, of voeg een kleine interface toe die in wiring.go wordt ingevuld.

Symptoom. TestSQLOnlyInStore of TestTableOwnership mislukt. Oorzaak. SQL staat buiten een store*.go-bestand, of raakt de tabel van een andere module. Oplossing. Verplaats de query naar de store van de eigenaar en roep de service van de eigenaar aan met het ID.

Meer regels
  • Een module importeert alleen het hoofdpakket van een andere module.
  • Storefuncties nemen een database.Querier. Lees rijen van een andere module via de service ervan met het ID, en geef lange ID-lijsten door als één JSON-array met json_each(?).
  • settings, schedules, secrets, jobs en events horen bij core. Elke groep instellingen heeft één eigenaarsmodule. Wil je de groep van een andere module wijzigen, roep dan de eigenaar aan.
  • Elke aanroep naar buiten gaat via core/outbound.
  • Core-pakketten staan in rijen, van boven naar beneden: parts, webserver en startup, logs, jobs en model, outbound en secrets, dan database, files en releasename. Een core-pakket importeert alleen uit de eigen rij of een lagere.
  • Namen: Go-bestanden zijn kleine letters met underscores, Svelte-onderdelen zijn PascalCase, en TypeScript-, docs-, test- en deploybestanden zijn kebab-case. Python-bestanden gebruiken underscores zodat ze kunnen worden geïmporteerd. Mappen in app/ zijn kleine letters, één woord.
  • Hernoem code gerust, maar alles wat wordt opgeslagen of verstuurd houdt zijn naam: tabellen en kolommen, instellingssleutels, JSON-velden, taaknamen en schakelaarnamen.
  • Commentaar bevat geen roadmapnummers, datums, namen of gedachtestreepjes.
Eigenaars van records
Eigenaar 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 en de gedeelde rijvelden
De controles

De controles staan in app/backend/tools/structurecheck. De meeste hebben -tags structure nodig.

Controle Bewaakt
TestTopLayout De mappen op het hoogste niveau van de repo
TestModuleSet, TestCoreSet, TestPackageMap Toegestane mappen in internal/ en internal/core/
TestModuleEdges Laagvolgorde
TestModuleImportsRootOnly Alleen imports van hoofdpakketten
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable Imports, rijvolgorde en namen in core
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist Plek van SQL en eigenaars van tabellen
TestGoFileNames, TestNoBannedPackageNames Bestands- en pakketnamen
TestFileSizeCap, TestCorePackageSize Grootte van bestanden en core-pakketten
TestCommentHygiene De commentaarregels hierboven
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged Een verplaatsing wijzigt geen route, migratie, HTTP-headernaam of JSON-sleutel
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs Oude pagina-adressen blijven weg uit code, tests en docs
TestNoDependencyBotConfig Geen bestand voor een dependencybot in .github

Gerelateerde pagina’s

Link naar Gerelateerde pagina’s

HolyArrs is gratis. Heeft het je tijd bespaard, geef het een ster op GitHub, sponsor het of trakteer me op een kop koffie.