Архитектура
Напредни
Пре веће измене нађи где је код и која правила важе.
Укратко
Линк до УкраткоHolyArrs је један Go програм са уграђеном веб апликацијом. Он служи веб апликацију и JSON API на порту 6262, а податке чува у 2 SQLite фајла у конфигурационом фолдеру. Обраћа се преузимачима, изворима (преко Jackett-а или Prowlarr-а), медија серверима, каналима за обавештења и HolyArrs серверу метаподатака.
Прати један захтев. Неко тражи филм на страници Explore (Истражи).
requestsбележи захтев.- Након одобрења,
moviesтражи одsourcesрелизе. - Правила избора у
mediafilesих оцењују бодовима. downloadsшаље најбољи преузимачу.- Када се преузимање заврши,
mediafilesувози фајл. mediaserversиalertsдобијају обавештење.
Мапа кода
Линк до Мапа кодаapp/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins themapp/backend/internal/<module>/ one flat folder per moduleapp/backend/internal/core/ plumbing every module may useapp/backend/tools/ dev-only programsapp/frontend/ the SvelteKit web app; embed.go bundles its buildapp/frontend/src/routes/<page>/ thin pages that combine module partsapp/frontend/src/lib/<module>/ each module's web codeapp/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing elseapp/frontend/src/lib/core/ server client, app state, helpersapp/tests/ end-to-end tests (Playwright)deploy/ the Dockerfile and release scriptsdocs/ guides and these pagesgo.mod је у корену репоа јер go:embed не може да досегне родитељски фолдер.
Где шта да нађеш
Линк до Где шта да нађеш| Желиш да промениш | Погледај у |
|---|---|
| Како се бира релиз | internal/mediafiles |
| Клијент за преузимач | internal/downloads, уговорни тестови у internal/downloads/conformance_test.go |
| Канал за обавештења | internal/alerts |
| Пријаву, кориснике, API кључеве | internal/accounts |
| Чаробњак за прво покретање | internal/setup, app/frontend/src/routes/welcome |
| Увоз готовог фајла (распакивање, тагови, упаривање) | internal/importer |
| Фолдере библиотеке, усвајање и преименовање | internal/library |
| Како се бирају и распоређују редови и полице | internal/suggest |
| Који делови апликације су укључени | internal/core/parts |
| Адресу странице | app/frontend/src/routes/ |
| Миграцију | internal/core/database/migrations/ |
| Docker image | deploy/Dockerfile |
Правила
Линк до ПравилаПровере у app/backend/tools/structurecheck обарају build када се неко правило прекрши. Покрени их линијом из странице Тестирање.
- Редослед слојева. Модул увози само модуле са нижег слоја, и то само њихов корени пакет. Модули на истом слоју никада не увозе један другог.
- Позив навише. Када нижем модулу треба нешто од вишег, виши му спушта обичне податке, или нижи дефинише мали интерфејс који попуњава
wiring.go. - SQL остаје код куће. SQL држе само
store*.goфајлови самог модула, и то само над његовим табелама. Да прочиташ редове другог модула, позови његов сервис. - Заједничке табеле припадају core-у. До
settings,schedules,secrets,jobsиeventsдолазиш преко core помоћника. - Један излаз. Сваки позив ка споља иде кроз
core/outbound. - Задржане функције региструју прекидач у
core/startup. Док је искључен, руте не постоје и страница крије функцију. - Без пакета за све и свашта. Без
util,common,sharedилиhelpers.
Редослед слојева је на страници Модули.
За напредне
Линк до За напреднеУнутар модула
Сваки backend модул користи иста имена фајлова.
| Фајл | Садржи |
|---|---|
routes.go |
API руте, свака са дозволом која јој треба |
service.go и фајлови по темама |
Логику коју зову други модули |
store.go, store_<topic>.go |
Сав SQL за табеле самог модула |
types.go |
Записе модула |
На веб страни, lib/<module>/ садржи index.ts (оно што други модули смеју да користе), своје Svelte делове и њихове тестове, а api.ts и state.svelte.ts само када има сопствене позиве или стање.
Core пакети
Core је само заједничка инфраструктура. Не садржи правила производа и не увози ниједан модул.
| Пакет | Садржи |
|---|---|
core/database |
Отварање и миграцију оба SQLite фајла, помоћнике за упите, помоћнике за подешавања и догађаје, заједничка поља редова, чишћење историје |
core/files |
Помоћнике за фајлове и фолдере, слободан простор на диску |
core/releasename |
Квалитет, групу и бројеве епизода из назива релиза |
core/outbound |
Једини начин за позивање спољних сервера, са провером адреса |
core/secrets |
Складиште кључева и ротацију кључева |
core/logs |
Лог апликације и белешке о паду |
core/jobs |
Ред задатака, распореде и петље које се поново покрећу после пада |
core/webserver |
Рутер, URL базу, компресију, живо слање |
core/startup |
Корисника под којим ради, режим мале потрошње меморије, прекидаче задржаних функција, ограничење меморије, модуле |
core/parts |
Прекидаче модула које сваки модул проверава пре него што служи или ради |
core/model |
Заједничке типове као што су актори и субјекти |
Када core мора да дира податке модула, модул региструје hook у core-у у wiring.go. Ротација кључева ради тако.
Подаци
| Фајл | Садржи |
|---|---|
holyarrs.db |
Библиотеку, захтеве, подешавања и све остало што је важно |
holyarrs-events.db |
Историју и остале редове догађаја. Расте и чисти се без дирања главног фајла |
Миграције су нумерисани SQL фајлови у core/database/migrations/main и core/database/migrations/events. Извршавају се при покретању.
Повезане странице
Линк до Повезане страницеHolyArrs је бесплатан. Ако ти је уштедео време, остави звездицу на GitHub-у, постани спонзор или купи ми кафу.