Модули
Напредни
Изабери модул коме твоја измена припада и знај које модуле сме да зове.
Пре него што почнеш
Линк до Пре него што почнеш- Прочитај Архитектура за мапу фолдера и правила.
- Сваки модул има исто име у
app/backend/internal/<module>/, а уapp/frontend/src/lib/<module>/иapp/tests/<module>/када има екране или тестове у претраживачу.
Нађи прави модул
Линк до Нађи прави модул| Модул | Ради |
|---|---|
requests |
Тражење, одобрења, правила захтева, спољне листе, пријаве |
movies |
Филмске наслове, издања, сетове, претрагу и организовање |
shows |
Серије, сезоне, епизоде, претрагу и организовање |
music |
Извођаче, албуме, песме, претрагу и организовање |
sources |
Изворе, Jackett и Prowlarr мост, претрагу релиза |
downloads |
Преузимаче, ред, виђене фајлове, мапе путања, тагове, избор копија |
subtitles |
Језике титлова, сајтове, упаривање и чување |
discover |
Explore, Popular, Search, People, Calendar, странице наслова |
suggest |
Бирање и распоређивање редова и полица (само backend) |
mediafiles |
Записе каталога, правила избора, именовање, пакете података, детаље о медијима |
importer |
Увоз фајлова: распакивање, тагови, упаривање (само backend) |
library |
Фолдере библиотеке, усвајање и преименовање (само backend) |
metadata |
Клијент за спољне податке, музичке упите, лествице оцена, трејлере |
mediaservers |
Говори Plex-у, Jellyfin-у и Emby-ју да поново погледају |
accounts |
Кориснике, пријаву, single sign-on, пријаву AI апликација, ограничења за децу, изборе гледања |
alerts |
Канале за обавештења и када проговоре |
migrate |
Пребацивање података из претходних апликација |
arrapi |
API у стилу Sonarr-а и Radarr-а |
ai |
Везе са AI апликацијама (задржано) |
backups |
Прављење, чување и враћање бекапа |
health |
Провере исправности, doctor, пакет за подршку |
updates |
Проверу ажурирања и потписану листу ажурирања |
setup |
Чаробњак за прво покретање |
Редослед слојева
Линк до Редослед слојеваМодул увози само нижи слој. Нико не увози discover. Извор истине је tools/structurecheck/allow.go.
| Слој | Модули |
|---|---|
| 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 |
Ако твом модулу треба нешто са вишег слоја, не увози то. Нека виши модул спусти обичне податке, или дефиниши мали интерфејс у нижем који попуњава wiring.go.
Додај руту или модул
Линк до Додај руту или модулНова рута
Линк до Нова рутаРегиструј је у routes.go модула са њеном дозволом. openapi.json долази из рута, а тест пада када се разилазе. Већ објављене путање и имена поља остају. Поља додај, никада не преименуј. Затим поново напиши API руте помоћу go run ./app/backend/tools/apidoc.
Нови модул
Линк до Нови модулПрво смести измену у постојећа 23, и отвори issue пре него што додаш нови. Нови модул треба свој backend фолдер (плус lib/<module>/ и app/tests/<module>/ ако има екране), место у редоследу слојева у tools/structurecheck и ред у wiring.go.
Ако не ради
Линк до Ако не радиСимптом. TestModuleEdges пада.
Узрок. Модул увози модул са истог или вишег слоја.
Решење. Спусти обичне податке из вишег модула, или додај мали интерфејс који се попуњава у wiring.go.
Симптом. TestSQLOnlyInStore или TestTableOwnership пада.
Узрок. SQL је ван store*.go фајла, или дира табелу другог модула.
Решење. Премести упит у store власника и позови сервис власника преко ID-а.
За напредне
Линк до За напреднеЈош правила
- Модул увози само корени пакет другог модула.
- Store функције примају
database.Querier. Редове другог модула читај преко његовог сервиса по ID-у, а дугачке листе ID-ова прослеђуј као један JSON низ саjson_each(?). settings,schedules,secrets,jobsиeventsприпадају core-у. Свака група подешавања има један модул власника. Да промениш групу другог модула, позови његовог власника.- Сваки позив ка споља иде кроз
core/outbound. - Core пакети су у редовима, одозго надоле:
parts,webserverиstartup,logs,jobsиmodel,outboundиsecrets, паdatabase,filesиreleasename. Core пакет увози само свој ред или нижи. - Имена: Go фајлови су малим словима са доњим цртама, Svelte делови су PascalCase, а TypeScript, docs, тестови и deploy фајлови су kebab-case. Python фајлови користе доње црте да би могли да се увозе. Фолдери у
app/су малим словима, једна реч. - Код слободно преименуј, али све што се чува или шаље задржава своје име: табеле и колоне, кључеве подешавања, JSON поља, имена задатака и имена прекидача.
- Коментари не носе бројеве из roadmap-а, датуме, имена ни дугачке цртице.
Власници записа
| Власник | Записи |
|---|---|
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 и заједничка поља редова |
Провере
Провере су у app/backend/tools/structurecheck. Већини треба -tags structure.
| Провера | Чува |
|---|---|
TestTopLayout |
Главне фолдере репоа |
TestModuleSet, TestCoreSet, TestPackageMap |
Фолдере дозвољене у internal/ и internal/core/ |
TestModuleEdges |
Редослед слојева |
TestModuleImportsRootOnly |
Увоз само корених пакета |
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable |
Core увозе, редослед редова и имена |
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist |
Место SQL-а и власнике табела |
TestGoFileNames, TestNoBannedPackageNames |
Имена фајлова и пакета |
TestFileSizeCap, TestCorePackageSize |
Величину фајла и core пакета |
TestCommentHygiene |
Горња правила за коментаре |
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged |
Премештање не мења руту, миграцију, име HTTP заглавља ни JSON кључ |
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs |
Старе адресе страница остају ван кода, тестова и docs-а |
TestNoDependencyBotConfig |
Нема фајла за dependency бот у .github |
Повезане странице
Линк до Повезане страницеHolyArrs је бесплатан. Ако ти је уштедео време, остави звездицу на GitHub-у, постани спонзор или купи ми кафу.