Kiến trúc
Nâng cao
Biết mã nằm ở đâu và quy tắc nào áp dụng trước khi bạn thay đổi một thứ lớn.
Tóm tắt nhanh
Liên kết tới Tóm tắt nhanhHolyArrs là một chương trình Go duy nhất, có sẵn ứng dụng web bên trong. Nó phục vụ ứng dụng web và một API JSON trên cổng 6262, và lưu dữ liệu trong 2 tệp SQLite ở thư mục cấu hình. Nó gọi ra các trình tải xuống, các Nguồn (qua Jackett hoặc Prowlarr), máy chủ media, các kênh cảnh báo và máy chủ metadata của HolyArrs.
Hãy theo dõi một yêu cầu. Có người yêu cầu một bộ phim lẻ trên Khám phá.
requestsghi lại yêu cầu.- Sau khi được duyệt,
moviesnhờsourcestìm các bản phát hành. - Các quy tắc chọn trong
mediafileschấm điểm chúng. downloadsgửi bản tốt nhất cho trình tải xuống.- Khi tải xong,
mediafilesnhập tệp vào. mediaserversvàalertsđược báo.
Sơ đồ mã
Liên kết tới Sơ đồ mã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 nằm ở gốc repo vì go:embed không thể với tới thư mục cha.
Tìm thứ bạn cần ở đâu
Liên kết tới Tìm thứ bạn cần ở đâu| Bạn muốn thay đổi | Xem trong |
|---|---|
| Cách chọn một bản phát hành | internal/mediafiles |
| Một client trình tải xuống | internal/downloads, các bài kiểm tra hợp đồng trong internal/downloads/conformance_test.go |
| Một kênh cảnh báo | internal/alerts |
| Đăng nhập, người dùng, khóa API | internal/accounts |
| Trình hướng dẫn lần chạy đầu tiên | internal/setup, app/frontend/src/routes/welcome |
| Nhập một tệp đã tải xong (giải nén, thẻ, đối chiếu) | internal/importer |
| Thư mục Thư viện, tiếp nhận và đổi tên | internal/library |
| Cách chọn và sắp xếp các hàng và kệ | internal/suggest |
| Những phần nào của ứng dụng đang bật | internal/core/parts |
| Địa chỉ một trang | app/frontend/src/routes/ |
| Một migration | internal/core/database/migrations/ |
| Docker image | deploy/Dockerfile |
Các quy tắc
Liên kết tới Các quy tắcCác bước kiểm tra trong app/backend/tools/structurecheck làm bản build thất bại khi có quy tắc bị vi phạm. Chạy chúng bằng dòng lệnh trong Kiểm thử.
- Thứ tự tầng. Một module chỉ import các module ở tầng thấp hơn, và chỉ import gói gốc của chúng. Các module cùng tầng không import nhau.
- Gọi lên trên. Khi module thấp cần thứ gì từ module cao hơn, module cao truyền dữ liệu thuần xuống, hoặc module thấp định nghĩa một interface nhỏ để
wiring.gođiền vào. - SQL ở yên trong nhà. Chỉ các tệp
store*.gocủa chính module mới chứa SQL, và chỉ trên bảng của chính nó. Muốn đọc các hàng của module khác, hãy gọi service của nó. - Bảng dùng chung thuộc về core. Truy cập
settings,schedules,secrets,jobsvàeventsqua các hàm hỗ trợ của core. - Một lối ra. Mọi lệnh gọi ra ngoài đều đi qua
core/outbound. - Tính năng chưa mở đăng ký một công tắc với
core/startup. Khi công tắc tắt, route không tồn tại và trang ẩn tính năng đó. - Không có gói chứa tạp. Không có
util,common,sharedhayhelpers.
Thứ tự tầng nằm trong Module.
Dành cho người dùng nâng cao
Liên kết tới Dành cho người dùng nâng caoBên trong một module
Mọi module backend dùng cùng một bộ tên tệp.
| Tệp | Chứa |
|---|---|
routes.go |
Các route API, mỗi route kèm quyền nó cần |
service.go và các tệp theo chủ đề |
Logic mà các module khác gọi |
store.go, store_<topic>.go |
Toàn bộ SQL cho các bảng của chính module |
types.go |
Các bản ghi của module |
Ở phía web, lib/<module>/ chứa index.ts (phần các module khác được dùng), các phần Svelte và bài kiểm tra của chúng, cùng api.ts và state.svelte.ts chỉ khi module có lệnh gọi hoặc trạng thái riêng.
Các gói core
Core là phần đường ống. Nó không chứa quy tắc sản phẩm và không import module nào.
| Gói | Chứa |
|---|---|
core/database |
Mở và migrate cả hai tệp SQLite, các hàm hỗ trợ truy vấn, cài đặt và sự kiện, các trường hàng dùng chung, cắt bớt lịch sử |
core/files |
Các hàm hỗ trợ tệp và thư mục, dung lượng ổ đĩa trống |
core/releasename |
Chất lượng, nhóm và số tập lấy từ tên một bản phát hành |
core/outbound |
Cách duy nhất để gọi máy chủ bên ngoài, kèm kiểm tra địa chỉ |
core/secrets |
Kho khóa và việc xoay khóa |
core/logs |
Nhật ký ứng dụng và ghi chú sự cố |
core/jobs |
Hàng đợi tác vụ, lịch chạy và các vòng lặp tự khởi động lại sau sự cố |
core/webserver |
Phần router, URL base, nén, đẩy dữ liệu trực tiếp |
core/startup |
Người dùng chạy chương trình, chế độ ít bộ nhớ, công tắc tính năng chưa mở, giới hạn bộ nhớ, các phần |
core/parts |
Các công tắc phần mà mọi module hỏi trước khi phục vụ hoặc chạy |
core/model |
Các kiểu dùng chung như actor và subject |
Khi core phải đụng đến dữ liệu của module, module đăng ký một hook với core trong wiring.go. Việc xoay khóa hoạt động theo cách này.
Dữ liệu
| Tệp | Chứa |
|---|---|
holyarrs.db |
Thư viện, các yêu cầu, cài đặt và mọi thứ quan trọng khác |
holyarrs-events.db |
Lịch sử và các hàng sự kiện khác. Nó lớn dần và được cắt bớt mà không đụng đến tệp chính |
Migration là các tệp SQL được đánh số trong core/database/migrations/main và core/database/migrations/events. Chúng chạy khi khởi động.
Liên quan
Liên kết tới Liên quanHolyArrs miễn phí. Nếu nó giúp bạn tiết kiệm thời gian, hãy gắn sao trên GitHub, tài trợ dự án hoặc mời tôi một ly cà phê.