Arquitectura
Expert
Troba on viu el codi i quines regles s’apliquen abans de canviar res d’important.
La versió curta
Enllaç a La versió curtaHolyArrs és un sol programa en Go amb l’app web integrada. Serveix l’app web i una API JSON al port 6262, i desa les dades en 2 fitxers SQLite a la carpeta de configuració. Es connecta a gestors de baixades, Fonts (a través de Jackett o Prowlarr), servidors multimèdia, canals d’avisos i el servidor de metadades d’HolyArrs.
Segueix una sola sol·licitud. Algú demana una pel·lícula a Explorar.
requestsregistra la petició.- Després de l’aprovació,
moviesdemana Llançaments asources. - Les regles d’elecció de
mediafilesels puntuen. downloadsenvia el millor al gestor de baixades.- Quan acaba,
mediafilesimporta el fitxer. - S’avisa
mediaserversialerts.
Mapa del codi
Enllaç a Mapa del codiapp/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 és a l’arrel del repositori perquè go:embed no pot arribar a una carpeta pare.
On trobar cada cosa
Enllaç a On trobar cada cosa| Vols canviar | Mira a |
|---|---|
| Com es tria un Llançament | internal/mediafiles |
| Un client de gestor de baixades | internal/downloads, proves de contracte a internal/downloads/conformance_test.go |
| Un canal d’avisos | internal/alerts |
| L’inici de sessió, els usuaris, les claus d’API | internal/accounts |
| L’assistent del primer inici | internal/setup, app/frontend/src/routes/welcome |
| La importació d’un fitxer acabat (descomprimir, etiquetes, coincidència) | internal/importer |
| Carpetes de la Biblioteca, adopció i canvi de nom | internal/library |
| Com es trien i s’ordenen les files i els prestatges | internal/suggest |
| Quines parts de l’app estan activades | internal/core/parts |
| L’adreça d’una pàgina | app/frontend/src/routes/ |
| Una migració | internal/core/database/migrations/ |
| La imatge de Docker | deploy/Dockerfile |
Les regles
Enllaç a Les reglesLes comprovacions de app/backend/tools/structurecheck fan fallar la compilació quan se’n trenca una. Executa-les amb la línia de Proves.
- Ordre de capes. Un mòdul només importa mòduls d’una capa inferior, i només el seu paquet arrel. Els mòduls de la mateixa capa no s’importen mai entre ells.
- Cridar cap amunt. Quan un mòdul inferior necessita alguna cosa d’un de superior, el superior li passa dades simples, o l’inferior defineix una interfície petita que omple
wiring.go. - L’SQL es queda a casa. Només els fitxers
store*.god’un mòdul tenen SQL, i només sobre les seves taules. Per llegir files d’un altre mòdul, crida el seu servei. - Les taules compartides són del core. Accedeix a
settings,schedules,secrets,jobsieventsamb els ajudants del core. - Una sola sortida. Cada crida a l’exterior passa per
core/outbound. - Les funcions retingudes registren un interruptor a
core/startup. Mentre està desactivat, la ruta no hi és i la pàgina amaga la funció. - Cap paquet calaix de sastre. Cap
util,common,sharednihelpers.
L’ordre de capes és a Mòduls.
Per a experts
Enllaç a Per a expertsDins d'un mòdul
Tots els mòduls del backend usen els mateixos noms de fitxer.
| Fitxer | Conté |
|---|---|
routes.go |
Les rutes de l’API, cadascuna amb el permís que necessita |
service.go i fitxers per tema |
La lògica que criden els altres mòduls |
store.go, store_<topic>.go |
Tot l’SQL de les taules del mòdul |
types.go |
Els registres del mòdul |
Al costat web, lib/<module>/ conté index.ts (el que poden usar els altres mòduls), les seves parts Svelte amb les proves, i api.ts i state.svelte.ts només quan té crides o estat propis.
Paquets del core
El core és la fontaneria. No conté regles del producte i no importa cap mòdul.
| Paquet | Conté |
|---|---|
core/database |
Obrir i migrar els dos fitxers SQLite, ajudants de consultes, ajudants de paràmetres i esdeveniments, camps de fila compartits, retallada de l’historial |
core/files |
Ajudants de fitxers i carpetes, espai lliure del disc |
core/releasename |
Qualitat, grup i números d’episodi a partir del nom d’un llançament |
core/outbound |
L’única manera de cridar servidors externs, amb comprovació d’adreces |
core/secrets |
L’emmagatzematge de claus i la rotació de claus |
core/logs |
El registre de l’app i les notes de fallades |
core/jobs |
La cua de tasques, les programacions i els bucles que es reinicien després d’una fallada |
core/webserver |
Fontaneria de l’encaminador, URL base, compressió, enviament en directe |
core/startup |
Usuari d’execució, mode de poca memòria, interruptors de funcions retingudes, límit de memòria, parts |
core/parts |
Els interruptors de parts que consulta cada mòdul abans de servir o executar |
core/model |
Tipus compartits, com actors i subjectes |
Quan el core ha de tocar dades d’un mòdul, el mòdul registra un hook al core a wiring.go. La rotació de claus funciona així.
Dades
| Fitxer | Conté |
|---|---|
holyarrs.db |
La Biblioteca, les sol·licituds, els paràmetres i tota la resta que importa |
holyarrs-events.db |
L’historial i altres files d’esdeveniments. Creix i es retalla sense tocar el fitxer principal |
Les migracions són fitxers SQL numerats a core/database/migrations/main i core/database/migrations/events. S’executen en iniciar.
Relacionat
Enllaç a RelacionatHolyArrs és gratis. Si t'ha estalviat temps, dona-li una estrella a GitHub, patrocina'l o convida'm a un cafè.