Пређи на садржај

Архитектура

Напредни

Пре веће измене нађи где је код и која правила важе.

HolyArrs је један Go програм са уграђеном веб апликацијом. Он служи веб апликацију и JSON API на порту 6262, а податке чува у 2 SQLite фајла у конфигурационом фолдеру. Обраћа се преузимачима, изворима (преко Jackett-а или Prowlarr-а), медија серверима, каналима за обавештења и HolyArrs серверу метаподатака.

Прати један захтев. Неко тражи филм на страници Explore (Истражи).

  1. requests бележи захтев.
  2. Након одобрења, movies тражи од sources релизе.
  3. Правила избора у mediafiles их оцењују бодовима.
  4. downloads шаље најбољи преузимачу.
  5. Када се преузимање заврши, mediafiles увози фајл.
  6. mediaservers и alerts добијају обавештење.
app/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins them
app/backend/internal/<module>/ one flat folder per module
app/backend/internal/core/ plumbing every module may use
app/backend/tools/ dev-only programs
app/frontend/ the SvelteKit web app; embed.go bundles its build
app/frontend/src/routes/<page>/ thin pages that combine module parts
app/frontend/src/lib/<module>/ each module's web code
app/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing else
app/frontend/src/lib/core/ server client, app state, helpers
app/tests/ end-to-end tests (Playwright)
deploy/ the Dockerfile and release scripts
docs/ guides and these pages

go.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-у, постани спонзор или купи ми кафу.