Siirry sisältöön

Arkkitehtuuri

Asiantuntija

Selvitä, missä koodi sijaitsee ja mitkä säännöt pätevät, ennen kuin muutat jotain isoa.

HolyArrs on yksi Go-ohjelma, johon verkkosovellus on sisäänrakennettu. Se tarjoaa verkkosovelluksen ja JSON-API:n portissa 6262 ja tallentaa tietonsa kahteen SQLite-tiedostoon asetuskansiossa. Se ottaa yhteyttä latausohjelmiin, lähteisiin (Jackettin tai Prowlarrin kautta), mediapalvelimiin, ilmoituskanaviin ja HolyArrsin metadatapalvelimeen.

Seuraa yhtä pyyntöä. Joku pyytää elokuvaa kohdassa Explore (selaa).

  1. requests kirjaa pyynnön.
  2. Hyväksynnän jälkeen movies pyytää sources-moduulilta julkaisuja.
  3. mediafiles-moduulin valintasäännöt antavat niille pisteet.
  4. downloads lähettää parhaan latausohjelmalle.
  5. Kun lataus valmistuu, mediafiles tuo tiedoston.
  6. mediaservers ja alerts saavat tiedon.
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 on repon juuressa, koska go:embed ei yllä ylätason kansioon.

Haluat muuttaa Katso
Miten julkaisu valitaan internal/mediafiles
Latausohjelman asiakas internal/downloads, sopimustestit tiedostossa internal/downloads/conformance_test.go
Ilmoituskanava internal/alerts
Kirjautuminen, käyttäjät, API-avaimet internal/accounts
Ensimmäisen käynnistyksen ohjattu toiminto internal/setup, app/frontend/src/routes/welcome
Valmistuneen tiedoston tuonti (purku, tagit, täsmäytys) internal/importer
Kirjastokansiot, hallintaan ottaminen ja uudelleennimeäminen internal/library
Miten rivit ja hyllyt valitaan ja järjestetään internal/suggest
Mitkä sovelluksen osat ovat käytössä internal/core/parts
Sivun osoite app/frontend/src/routes/
Migraatio internal/core/database/migrations/
Docker-image deploy/Dockerfile

Kansion app/backend/tools/structurecheck tarkistukset kaatavat buildin, jos jokin sääntö rikkoutuu. Suorita ne sivun Testaus komennolla.

  • Kerrosjärjestys. Moduuli tuo vain alemman kerroksen moduuleja, ja vain niiden juuripaketin. Saman kerroksen moduulit eivät koskaan tuo toisiaan.
  • Kutsu ylöspäin. Kun alempi moduuli tarvitsee jotain ylemmältä, ylempi välittää tavallista dataa alas tai alempi määrittelee pienen rajapinnan, jonka wiring.go täyttää.
  • SQL pysyy kotona. Vain moduulin omissa store*.go-tiedostoissa on SQL:ää, ja vain moduulin omiin tauluihin. Jos haluat lukea toisen moduulin rivejä, kutsu sen palvelua.
  • Jaetut taulut kuuluvat coreen. Käytä settings-, schedules-, secrets-, jobs- ja events-tauluja core-apufunktioiden kautta.
  • Yksi tie ulos. Jokainen ulkoinen kutsu kulkee core/outbound-paketin kautta.
  • Myöhemmäksi jätetyt ominaisuudet rekisteröivät kytkimen core/startup-pakettiin. Kun kytkin on pois päältä, reittiä ei ole ja sivu piilottaa ominaisuuden.
  • Ei sekalaisia paketteja. Ei util-, common-, shared- eikä helpers-pakettia.

Kerrosjärjestys on sivulla Moduulit.

Moduulin sisällä

Jokaisessa backend-moduulissa on samat tiedostonimet.

Tiedosto Sisältö
routes.go API-reitit, kullakin tarvittava oikeus
service.go ja aihekohtaiset tiedostot Logiikka, jota muut moduulit kutsuvat
store.go, store_<topic>.go Kaikki moduulin omien taulujen SQL
types.go Moduulin tietueet

Verkkopuolella lib/<module>/ sisältää tiedoston index.ts (mitä muut moduulit saavat käyttää), moduulin Svelte-osat testeineen sekä api.ts- ja state.svelte.ts-tiedostot vain, jos moduulilla on omia kutsuja tai tilaa.

Core-paketit

Core on putkistoa. Siinä ei ole tuotteen sääntöjä, eikä se tuo yhtään moduulia.

Paketti Sisältö
core/database Molempien SQLite-tiedostojen avaus ja migraatiot, kyselyapufunktiot, asetusten ja tapahtumien apufunktiot, jaetut rivikentät, historian siistiminen
core/files Tiedosto- ja kansioapufunktiot, levyn vapaa tila
core/releasename Laatu, ryhmä ja jaksonumerot julkaisun nimestä
core/outbound Ainoa tapa kutsua ulkoisia palvelimia, osoitetarkistuksineen
core/secrets Avainvarasto ja avainten vaihto
core/logs Sovelluksen loki ja kaatumismuistiinpanot
core/jobs Tehtäväjono, aikataulut ja silmukat, jotka käynnistyvät uudelleen kaatumisen jälkeen
core/webserver Reitittimen putkisto, URL base, pakkaus, live-push
core/startup Ajokäyttäjä, vähämuistitila, myöhemmäksi jätettyjen ominaisuuksien kytkimet, muistiraja, osat
core/parts Osien kytkimet, joilta jokainen moduuli kysyy ennen palvelemista tai ajoa
core/model Jaetut tyypit, kuten toimijat ja kohteet

Kun coren pitää koskea moduulin dataan, moduuli rekisteröi coreen koukun tiedostossa wiring.go. Avainten vaihto toimii näin.

Data
Tiedosto Sisältö
holyarrs.db Kirjasto, pyynnöt, asetukset ja kaikki muu tärkeä
holyarrs-events.db Historia ja muut tapahtumarivit. Se kasvaa, ja sitä siistitään koskematta päätiedostoon

Migraatiot ovat numeroituja SQL-tiedostoja kansioissa core/database/migrations/main ja core/database/migrations/events. Ne suoritetaan käynnistyksessä.

HolyArrs on ilmainen. Jos se säästi aikaasi, anna sille tähti GitHubissa, tue sitä tai tarjoa minulle kahvit.