Module
Fortgeschritten
Wähle das Modul, in das deine Änderung gehört, und erfahre, welche Module es aufrufen darf.
Bevor du beginnst
Link zu Bevor du beginnst- Lies Architektur für die Ordnerübersicht und die Regeln.
- Jedes Modul heißt in
app/backend/internal/<module>/gleich, und ebenso inapp/frontend/src/lib/<module>/undapp/tests/<module>/, wenn es Ansichten oder Browsertests hat.
Das richtige Modul finden
Link zu Das richtige Modul finden| Modul | Aufgabe |
|---|---|
requests |
Anfragen, Genehmigungen, Anfrageregeln, externe Listen, Meldungen |
movies |
Filmtitel, Editionen, Reihen, Suche und Ordnen |
shows |
Serien, Staffeln, Folgen, Suche und Ordnen |
music |
Künstler, Alben, Tracks, Suche und Ordnen |
sources |
Quellen, die Brücke zu Jackett und Prowlarr, Release-Suche |
downloads |
Downloader, die Warteschlange, gesehene Dateien, Pfadzuordnungen, Tags, Kopieroptionen |
subtitles |
Untertitelsprachen, Seiten, Zuordnung und Speichern |
discover |
Entdecken, Beliebt, Suche, Personen, Kalender, Titelseiten |
suggest |
Auswählen und Sortieren von Reihen und Regalen (nur Backend) |
mediafiles |
Katalogdatensätze, Auswahlregeln, Benennung, Datenpakete, Mediendetails |
importer |
Dateiimport: Entpacken, Tags, Zuordnung (nur Backend) |
library |
Bibliotheksordner, Übernehmen und Umbenennen (nur Backend) |
metadata |
Der Client für externe Daten, Musikabfragen, Bewertungsstufen, Trailer |
mediaservers |
Plex, Jellyfin und Emby sagen, dass sie neu nachsehen sollen |
accounts |
Benutzer, Anmeldung, Single Sign-on, Anmeldung für KI-Apps, Kinderlimits, Anzeigeoptionen |
alerts |
Benachrichtigungskanäle und wann sie sich melden |
migrate |
Daten aus bisherigen Apps herüberholen |
arrapi |
Die API im Stil von Sonarr und Radarr |
ai |
Verbindungen zu KI-Apps (zurückgestellt) |
backups |
Backups erstellen, aufbewahren und wiederherstellen |
health |
Zustandsprüfungen, der Doctor, das Support-Paket |
updates |
Die Update-Prüfung und die signierte Update-Liste |
setup |
Der Assistent für den ersten Start |
Reihenfolge der Schichten
Link zu Reihenfolge der SchichtenEin Modul importiert nur eine tiefere Schicht. Nichts importiert discover. Maßgeblich ist tools/structurecheck/allow.go.
| Schicht | Module |
|---|---|
| 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 |
Braucht dein Modul etwas aus einer höheren Schicht, dann importiere sie nicht. Lass das höhere Modul einfache Daten nach unten reichen, oder lege im tieferen ein kleines Interface fest, das wiring.go füllt.
Eine Route oder ein Modul hinzufügen
Link zu Eine Route oder ein Modul hinzufügenNeue Route
Link zu Neue RouteMelde sie in der routes.go des Moduls mit ihrer Berechtigung an. openapi.json entsteht aus den Routen, und ein Test schlägt bei Abweichungen fehl. Veröffentlichte Pfade und Feldnamen bleiben. Füge Felder hinzu, benenne sie nie um. Schreibe danach API-Routen mit go run ./app/backend/tools/apidoc neu.
Neues Modul
Link zu Neues ModulVersuche zuerst, deine Änderung in den 23 unterzubringen, und öffne ein Issue, bevor du eines hinzufügst. Ein neues Modul braucht seinen Backend-Ordner (dazu lib/<module>/ und app/tests/<module>/, wenn es Ansichten hat), einen Platz in der Reihenfolge der Schichten in tools/structurecheck und eine Zeile in wiring.go.
Wenn es nicht funktioniert
Link zu Wenn es nicht funktioniertSymptom. TestModuleEdges schlägt fehl.
Ursache. Ein Modul importiert eines aus derselben oder einer höheren Schicht.
Lösung. Reiche einfache Daten aus dem höheren Modul nach unten, oder füge ein kleines Interface hinzu, das in wiring.go verdrahtet wird.
Symptom. TestSQLOnlyInStore oder TestTableOwnership schlägt fehl.
Ursache. SQL steht außerhalb einer store*.go-Datei oder greift auf die Tabelle eines anderen Moduls zu.
Lösung. Verschiebe die Abfrage in den Store des Eigentümers und rufe dessen Service per ID auf.
Für Fortgeschrittene
Link zu Für FortgeschritteneWeitere Regeln
- Ein Modul importiert von einem anderen Modul nur das Wurzelpaket.
- Store-Funktionen nehmen einen
database.Querierentgegen. Lies die Zeilen eines anderen Moduls über dessen Service per ID, und übergib lange ID-Listen als ein JSON-Array mitjson_each(?). settings,schedules,secrets,jobsundeventsgehören core. Jede Einstellungsgruppe hat genau ein Modul als Eigentümer. Um die Gruppe eines anderen Moduls zu ändern, rufst du ihren Eigentümer auf.- Jeder Aufruf nach außen läuft über
core/outbound. - Core-Pakete liegen in Reihen, von oben nach unten:
parts,webserverundstartup,logs,jobsundmodel,outboundundsecrets, danndatabase,filesundreleasename. Ein Core-Paket importiert nur aus seiner eigenen Reihe oder tiefer. - Namen: Go-Dateien sind kleingeschrieben mit Unterstrichen, Svelte-Bausteine stehen in PascalCase, und TypeScript-, Doku-, Test- und Deploy-Dateien in kebab-case. Python-Dateien verwenden Unterstriche, damit sie importiert werden können. Ordner in
app/sind kleingeschrieben und bestehen aus einem Wort. - Benenne Code frei um, aber alles, was gespeichert oder gesendet wird, behält seinen Namen: Tabellen und Spalten, Einstellungsschlüssel, JSON-Felder, Aufgabennamen und Schalternamen.
- Kommentare enthalten keine Roadmap-Nummern, Daten, Namen oder Geviertstriche.
Eigentümer der Datensätze
| Eigentümer | Datensätze |
|---|---|
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 und die gemeinsamen Zeilenfelder |
Die Prüfungen
Die Prüfungen liegen in app/backend/tools/structurecheck. Die meisten brauchen -tags structure.
| Prüfung | Sichert |
|---|---|
TestTopLayout |
Die obersten Ordner des Repos |
TestModuleSet, TestCoreSet, TestPackageMap |
Ordner, die in internal/ und internal/core/ erlaubt sind |
TestModuleEdges |
Reihenfolge der Schichten |
TestModuleImportsRootOnly |
Nur Importe des Wurzelpakets |
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable |
Importe, Reihenfolge der Reihen und Namen in core |
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist |
Wo SQL steht und wem Tabellen gehören |
TestGoFileNames, TestNoBannedPackageNames |
Datei- und Paketnamen |
TestFileSizeCap, TestCorePackageSize |
Größe von Dateien und Core-Paketen |
TestCommentHygiene |
Die Kommentarregeln oben |
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged |
Ein Verschieben ändert keine Route, keine Migration, keinen HTTP-Header-Namen und keinen JSON-Schlüssel |
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs |
Alte Seitenadressen bleiben aus Code, Tests und Doku verschwunden |
TestNoDependencyBotConfig |
Keine Datei für einen Abhängigkeits-Bot in .github |
Verwandte Seiten
Link zu Verwandte SeitenHolyArrs ist kostenlos. Wenn es dir Zeit gespart hat, gib ihm einen Stern auf GitHub, unterstütze es als Sponsor oder spendier mir einen Kaffee.