Lumaktaw sa nilalaman

Modules

Eksperto

Piliin ang module na pinagmumulan ng pagbabago mo, at alamin kung aling mga module ang puwede nitong tawagin.

  • Basahin ang Architecture para sa mapa ng folder at sa mga patakaran.
  • Pareho ang pangalan ng bawat module sa app/backend/internal/<module>/, at sa app/frontend/src/lib/<module>/ at app/tests/<module>/ kapag may mga screen o browser test ito.
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

Ang 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.

I-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.

Subukan 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.

Sintomas. 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.

Higit 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 ang json_each(?).
  • Ang settings, schedules, secrets, jobs at events ay 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, webserver at startup, logs, jobs at model, outbound at secrets, tapos database, files at releasename. 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

Libre ang HolyArrs. Kung nakatipid ito ng oras mo, bigyan ito ng star sa GitHub, i-sponsor ito o ibili ako ng kape.