Modules
Eksperto
Piliin ang module na pinagmumulan ng pagbabago mo, at alamin kung aling mga module ang puwede nitong tawagin.
Bago ka magsimula
Link papunta sa Bago ka magsimula- Basahin ang Architecture para sa mapa ng folder at sa mga patakaran.
- Pareho ang pangalan ng bawat module sa
app/backend/internal/<module>/, at saapp/frontend/src/lib/<module>/atapp/tests/<module>/kapag may mga screen o browser test ito.
Hanapin ang tamang module
Link papunta sa Hanapin ang tamang module| Module | Ginagawa |
|---|---|
requests |
Paghiling, pag-apruba, mga patakaran ng request, panlabas na listahan, mga ulat |
movies |
Mga pamagat ng pelikula, edisyon, set, paghahanap at pag-aayos |
shows |
Mga palabas, season, episode, paghahanap at pag-aayos |
music |
Mga artist, album, kanta, paghahanap at pag-aayos |
sources |
Pinagkukunan, ang tulay ng Jackett at Prowlarr, paghahanap ng release |
downloads |
Mga downloader, ang pila, mga nakitang file, path map, tag, pagpili ng kopya |
subtitles |
Mga wika ng subtitle, site, pagtutugma at pag-save |
discover |
Explore, Popular, Search, People, Calendar, mga page ng pamagat |
suggest |
Pagpili at pag-aayos ng mga row at shelf (backend lang) |
mediafiles |
Mga record ng katalogo, Mga patakaran sa pagpili, pagbibigay ng pangalan, data pack, detalye ng media |
importer |
Pag-import ng file: pag-unpack, tag, pagtutugma (backend lang) |
library |
Mga folder ng Aklatan, pag-ampon at pagpapalit ng pangalan (backend lang) |
metadata |
Ang client ng data sa labas, paghahanap ng musika, mga hagdan ng rating, trailer |
mediaservers |
Pagsasabi sa Plex, Jellyfin at Emby na tumingin muli |
accounts |
Mga user, sign-in, single sign-on, sign-in ng AI app, limitasyon para sa bata, mga pagpipilian sa panonood |
alerts |
Mga channel ng alerto at kung kailan sila magsasalita |
migrate |
Pagdadala ng data mula sa mga naunang app |
arrapi |
Ang API na istilong Sonarr at Radarr |
ai |
Mga koneksyon ng AI app (hindi pa bukas) |
backups |
Paggawa, pag-iingat at pag-restore ng mga backup |
health |
Mga pagsusuri ng kalusugan, ang doctor, ang support bundle |
updates |
Ang pagsusuri ng update at ang pirmadong update list |
setup |
Ang wizard sa unang takbo |
Ayos ng layer
Link papunta sa Ayos ng layerAng isang module ay nag-i-import lang ng mas mababang layer. Walang nag-i-import sa discover. Ang tools/structurecheck/allow.go ang batayan.
| Layer | Mga 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 |
Kung may kailangan ang module mo mula sa mas mataas na layer, huwag itong i-import. Ipapasa ng mas mataas na module ang simpleng data pababa, o magde-define ng maliit na interface ang mas mababa na pupunuan ng wiring.go.
Magdagdag ng route o module
Link papunta sa Magdagdag ng route o moduleBagong route
Link papunta sa Bagong routeI-register ito sa routes.go ng module kasama ang permiso nito. Ang openapi.json ay galing sa mga route, at babagsak ang isang test kapag may lumihis. Nananatili ang mga path at pangalan ng field na nailabas na. Magdagdag ng mga field, huwag magpalit ng pangalan. Pagkatapos, isulat muli ang Mga API route gamit ang go run ./app/backend/tools/apidoc.
Bagong module
Link papunta sa Bagong moduleSubukan munang isiksik ang pagbabago mo sa 23, at magbukas ng issue bago ka magdagdag ng isa. Ang bagong module ay nangangailangan ng backend folder nito (dagdag ang lib/<module>/ at app/tests/<module>/ kung may mga screen), isang lugar sa ayos ng layer sa tools/structurecheck, at isang linya sa wiring.go.
Kung hindi gumana
Link papunta sa Kung hindi gumanaSintomas. Bumagsak ang TestModuleEdges.
Dahilan. Nag-i-import ang isang module ng isa sa parehong layer o mas mataas.
Solusyon. Magpasa ng simpleng data pababa mula sa mas mataas na module, o magdagdag ng maliit na interface na ikinakabit sa wiring.go.
Sintomas. Bumagsak ang TestSQLOnlyInStore o TestTableOwnership.
Dahilan. Ang SQL ay nasa labas ng isang store*.go file, o humahawak sa table ng ibang module.
Solusyon. Ilipat ang query sa store ng may-ari at tawagin ang service ng may-ari gamit ang ID.
Para sa mga eksperto
Link papunta sa Para sa mga ekspertoHigit pang mga patakaran
- Ang isang module ay nag-i-import lang ng root package ng ibang module.
- Ang mga store function ay tumatanggap ng
database.Querier. Basahin ang mga row ng ibang module sa pamamagitan ng service nito gamit ang ID, at ipasa ang mahahabang listahan ng ID bilang isang JSON array gamit angjson_each(?). - Ang
settings,schedules,secrets,jobsateventsay pag-aari ng core. Bawat grupo ng setting ay may isang module na may-ari. Para baguhin ang grupo ng ibang module, tawagin ang may-ari nito. - Bawat tawag sa labas ay dumadaan sa
core/outbound. - Ang mga core package ay nasa mga hanay, mula itaas pababa:
parts,webserveratstartup,logs,jobsatmodel,outboundatsecrets, taposdatabase,filesatreleasename. Ang isang core package ay nag-i-import lang ng sarili nitong hanay o mas mababa. - Mga pangalan: lowercase na may underscore ang mga Go file, PascalCase ang mga Svelte part, at kebab-case ang mga file ng TypeScript, docs, test at deploy. Gumagamit ng underscore ang mga Python file para ma-import ang mga ito. Lowercase at isang salita ang mga folder sa
app/. - Malayang palitan ang pangalan ng code, pero anumang itinatabi o ipinapadala ay nananatili ang pangalan: mga table at column, mga key ng setting, mga field ng JSON, mga pangalan ng job at mga pangalan ng switch.
- Walang numero ng roadmap, petsa, pangalan o em dash ang mga comment.
Mga may-ari ng record
| May-ari | Mga record |
|---|---|
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 at ang mga shared na field ng row |
Ang mga check
Nasa app/backend/tools/structurecheck ang mga check. Karamihan ay nangangailangan ng -tags structure.
| Check | Binabantayan |
|---|---|
TestTopLayout |
Mga pinakaitaas na folder ng repo |
TestModuleSet, TestCoreSet, TestPackageMap |
Mga folder na pinapayagan sa internal/ at internal/core/ |
TestModuleEdges |
Ayos ng layer |
TestModuleImportsRootOnly |
Pag-import ng root package lang |
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable |
Mga import ng core, ayos ng hanay at mga pangalan |
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist |
Lugar ng SQL at mga may-ari ng table |
TestGoFileNames, TestNoBannedPackageNames |
Mga pangalan ng file at package |
TestFileSizeCap, TestCorePackageSize |
Laki ng file at ng core package |
TestCommentHygiene |
Mga patakaran sa comment sa itaas |
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged |
Walang binabago ang paglipat sa route, migration, pangalan ng HTTP header o key ng JSON |
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs |
Nananatiling wala ang mga lumang address ng page sa code, mga test at docs |
TestNoDependencyBotConfig |
Walang file ng dependency bot sa .github |
Kaugnay
Link papunta sa KaugnayLibre ang HolyArrs. Kung nakatipid ito ng oras mo, bigyan ito ng star sa GitHub, i-sponsor ito o ibili ako ng kape.