Modules
Gevorderd
Kies de module waar je wijziging bij hoort en weet welke modules die mag aanroepen.
Voor je begint
Link naar Voor je begint- Lees Architectuur voor de mappenkaart en de regels.
- Elke module heeft dezelfde naam in
app/backend/internal/<module>/, en inapp/frontend/src/lib/<module>/enapp/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 |
Laagvolgorde
Link naar LaagvolgordeEen 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 toevoegenNieuwe route
Link naar Nieuwe routeRegistreer 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.
Nieuwe module
Link naar Nieuwe modulePas 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.
Als het niet werkt
Link naar Als het niet werktSymptoom. 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.
Voor gevorderden
Link naar Voor gevorderdenMeer 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 metjson_each(?). settings,schedules,secrets,jobseneventshoren 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,webserverenstartup,logs,jobsenmodel,outboundensecrets, dandatabase,filesenreleasename. 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’sHolyArrs is gratis. Heeft het je tijd bespaard, geef het een ster op GitHub, sponsor het of trakteer me op een kop koffie.