Moduliai
Pažengusiam
Pasirink modulį, kuriam tavo pakeitimas priklauso, ir žinok, kuriuos modulius jis gali kviesti.
Prieš pradedant
Nuoroda į Prieš pradedant- Perskaityk architektūrą, kad žinotum aplankų žemėlapį ir taisykles.
- Kiekvienas modulis turi tą patį pavadinimą aplanke
app/backend/internal/<module>/, o kai turi ekranų ar naršyklės testų, ir aplankuoseapp/frontend/src/lib/<module>/beiapp/tests/<module>/.
Rask tinkamą modulį
Nuoroda į Rask tinkamą modulį| Modulis | Ką daro |
|---|---|
requests |
Prašymus, patvirtinimus, prašymų taisykles, išorinius sąrašus, ataskaitas |
movies |
Filmų pavadinimus, leidimus, rinkinius, paiešką ir tvarkymą |
shows |
Serialus, sezonus, serijas, paiešką ir tvarkymą |
music |
Atlikėjus, albumus, kūrinius, paiešką ir tvarkymą |
sources |
Šaltinius, Jackett ir Prowlarr tiltą, release paiešką |
downloads |
Atsisiuntimo programas, eilę, matytus failus, kelių atitikmenis, tagus, kopijų pasirinkimus |
subtitles |
Subtitrų kalbas, svetaines, atitikimą ir išsaugojimą |
discover |
Explore, Popular, Search, People, Calendar, pavadinimų puslapius |
suggest |
Eilučių ir lentynų parinkimą bei išdėstymą (tik serverio pusė) |
mediafiles |
Katalogo įrašus, parinkimo taisykles, pavadinimų formavimą, duomenų paketus, medijos detales |
importer |
Failų importą: išpakavimą, tagus, atitikimą (tik serverio pusė) |
library |
Bibliotekos aplankus, perėmimą ir pervadinimą (tik serverio pusė) |
metadata |
Išorinių duomenų klientą, muzikos paieškas, amžiaus įvertinimų skales, anonsus |
mediaservers |
Pranešimą Plex, Jellyfin ir Emby, kad pažiūrėtų dar kartą |
accounts |
Naudotojus, prisijungimą, single sign-on, AI programų prisijungimą, vaikų limitus, žiūrėjimo pasirinkimus |
alerts |
Pranešimų kanalus ir kada jie prabyla |
migrate |
Duomenų perkėlimą iš ankstesnių programų |
arrapi |
Sonarr ir Radarr tipo API |
ai |
AI programų ryšius (atidėta) |
backups |
Backup kūrimą, laikymą ir atkūrimą |
health |
Būklės patikras, diagnostikos įrankį (doctor), palaikymo paketą |
updates |
Atnaujinimų patikrą ir pasirašytą atnaujinimų sąrašą |
setup |
Pirmo paleidimo vedlį |
Sluoksnių tvarka
Nuoroda į Sluoksnių tvarkaModulis importuoja tik žemesnį sluoksnį. Niekas neimportuoja discover. Tiesos šaltinis yra tools/structurecheck/allow.go.
| Sluoksnis | Moduliai |
|---|---|
| 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 |
Jei tavo moduliui kažko reikia iš aukštesnio sluoksnio, neimportuok to. Tegul aukštesnis modulis perduoda paprastus duomenis žemyn arba apibrėžk žemesniame mažą sąsają, kurią užpildo wiring.go.
Pridėk maršrutą ar modulį
Nuoroda į Pridėk maršrutą ar modulįNaujas maršrutas
Nuoroda į Naujas maršrutasUžregistruok jį modulio routes.go su jo teise. openapi.json sukuriamas iš maršrutų, o testas nepavyksta, kai jie išsiskiria. Išleisti keliai ir laukų pavadinimai lieka. Laukus pridėk, niekada nepervadink. Paskui perrašyk API maršrutus komanda go run ./app/backend/tools/apidoc.
Naujas modulis
Nuoroda į Naujas modulisPirmiausia pabandyk sutalpinti pakeitimą į esamus 23 ir atidaryk issue, prieš pridedant naują. Naujam moduliui reikia serverio pusės aplanko (plius lib/<module>/ ir app/tests/<module>/, jei turi ekranų), vietos sluoksnių tvarkoje tools/structurecheck ir eilutės wiring.go.
Jei neveikia
Nuoroda į Jei neveikiaPožymis. TestModuleEdges nepavyksta.
Priežastis. Modulis importuoja tą patį ar aukštesnį sluoksnį.
Sprendimas. Perduok paprastus duomenis žemyn iš aukštesnio modulio arba pridėk mažą sąsają, užpildomą wiring.go.
Požymis. TestSQLOnlyInStore arba TestTableOwnership nepavyksta.
Priežastis. SQL yra ne store*.go faile arba liečia kito modulio lentelę.
Sprendimas. Perkelk užklausą į savininko store ir kviesk savininko servisą pagal ID.
Pažengusiems
Nuoroda į PažengusiemsDaugiau taisyklių
- Modulis importuoja tik kito modulio šakninį paketą.
- Store funkcijos priima
database.Querier. Kito modulio eilutes skaityk per jo servisą pagal ID, o ilgus ID sąrašus perduok kaip vieną JSON masyvą sujson_each(?). settings,schedules,secrets,jobsireventspriklauso core. Kiekviena nustatymų grupė turi vieną modulį savininką. Kad pakeistum kito modulio grupę, kviesk jos savininką.- Kiekvienas išorinis kreipinys eina per
core/outbound. - Core paketai sudėlioti eilėmis iš viršaus žemyn:
parts,webserverirstartup,logs,jobsirmodel,outboundirsecrets, tadadatabase,filesirreleasename. Core paketas importuoja tik savo eilę arba žemesnę. - Pavadinimai: Go failai rašomi mažosiomis su pabraukimais, Svelte dalys PascalCase, o TypeScript, dokumentų, testų ir deploy failai kebab-case. Python failai naudoja pabraukimus, kad juos būtų galima importuoti. Aplankai
app/viduje rašomi mažosiomis, vienu žodžiu. - Kodą pervadink laisvai, bet viskas, kas saugoma ar siunčiama, pasilieka savo pavadinimą: lentelės ir stulpeliai, nustatymų raktai, JSON laukai, užduočių pavadinimai ir jungiklių pavadinimai.
- Komentaruose nėra plano numerių, datų, vardų ar ilgųjų brūkšnių.
Įrašų savininkai
| Savininkas | Įrašai |
|---|---|
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 ir bendri eilučių laukai |
Patikros
Patikros gyvena app/backend/tools/structurecheck. Daugumai reikia -tags structure.
| Patikra | Saugo |
|---|---|
TestTopLayout |
Viršutinius repo aplankus |
TestModuleSet, TestCoreSet, TestPackageMap |
Aplankus, leidžiamus internal/ ir internal/core/ |
TestModuleEdges |
Sluoksnių tvarką |
TestModuleImportsRootOnly |
Tik šakninio paketo importus |
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable |
Core importus, eilių tvarką ir pavadinimus |
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist |
SQL vietą ir lentelių savininkus |
TestGoFileNames, TestNoBannedPackageNames |
Failų ir paketų pavadinimus |
TestFileSizeCap, TestCorePackageSize |
Failo ir core paketo dydį |
TestCommentHygiene |
Aukščiau aprašytas komentarų taisykles |
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged |
Kad perkėlimas nepakeistų maršruto, migracijos, HTTP antraštės pavadinimo ar JSON rakto |
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs |
Kad seni puslapių adresai neatsirastų kode, testuose ir dokumentuose |
TestNoDependencyBotConfig |
Kad .github nebūtų priklausomybių boto failo |
Susiję puslapiai
Nuoroda į Susiję puslapiaiHolyArrs yra nemokama. Jei sutaupė tau laiko, pažymėk jį žvaigždute GitHub, paremk jį arba nupirk man kavos.