आर्किटेक्चर
एक्सपर्ट
कोई बड़ा बदलाव करने से पहले जानें कि कोड कहाँ रहता है और कौन से नियम लागू होते हैं।
छोटे में
छोटे में का लिंकHolyArrs एक Go प्रोग्राम है, जिसमें वेब ऐप साथ में बना हुआ है। यह पोर्ट 6262 पर वेब ऐप और एक JSON API देता है, और अपना डेटा कॉन्फ़िग फ़ोल्डर की 2 SQLite फ़ाइलों में रखता है। यह डाउनलोडर, सोर्स (Jackett या Prowlarr के ज़रिए), मीडिया सर्वर, अलर्ट चैनल और HolyArrs के मेटाडेटा सर्वर से बात करता है।
एक रिक्वेस्ट के साथ चलकर देखें। कोई एक्सप्लोर पर एक फ़िल्म माँगता है।
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 इमेज | deploy/Dockerfile |
नियम
नियम का लिंकapp/backend/tools/structurecheck की जाँचें कोई नियम टूटते ही बिल्ड फ़ेल कर देती हैं। इन्हें टेस्टिंग में दी गई लाइन से चलाएं।
- लेयर का क्रम। एक मॉड्यूल सिर्फ़ निचली लेयर के मॉड्यूल इंपोर्ट करता है, और उनका भी सिर्फ़ रूट पैकेज। एक ही लेयर के मॉड्यूल एक-दूसरे को कभी इंपोर्ट नहीं करते।
- ऊपर की ओर कॉल। जब निचले मॉड्यूल को ऊपर वाले से कुछ चाहिए, तो ऊपर वाला सादा डेटा नीचे भेजता है, या निचला मॉड्यूल एक छोटा इंटरफ़ेस बनाता है जिसे
wiring.goभरता है। - SQL अपने घर में रहता है। SQL सिर्फ़ मॉड्यूल की अपनी
store*.goफ़ाइलों में रहता है, और सिर्फ़ उसकी अपनी टेबल पर चलता है। किसी और मॉड्यूल की लाइनें पढ़नी हों, तो उसकी सर्विस को कॉल करें। - साझा टेबल core की हैं।
settings,schedules,secrets,jobsऔरeventsतक core के हेल्पर से पहुँचें। - बाहर जाने का एक ही रास्ता। बाहर की हर कॉल
core/outboundसे होकर जाती है। - रोके हुए फ़ीचर
core/startupमें एक स्विच रजिस्टर करते हैं। जब तक वह बंद है, रूट मौजूद नहीं होता और पेज फ़ीचर को छिपा देता है। - कबाड़ वाले पैकेज नहीं।
util,common,sharedयाhelpersनहीं।
लेयर का क्रम मॉड्यूल में है।
एक्सपर्ट के लिए
एक्सपर्ट के लिए का लिंकमॉड्यूल के अंदर
हर बैकएंड मॉड्यूल में फ़ाइलों के नाम एक जैसे होते हैं।
| फ़ाइल | इसमें क्या है |
|---|---|
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 base, कंप्रेशन, लाइव पुश |
core/startup |
किस यूज़र के तौर पर चलना है, लो-मेमोरी मोड, रोके हुए फ़ीचर के स्विच, मेमोरी की सीमा, हिस्से |
core/parts |
हिस्सों के स्विच, जिनसे हर मॉड्यूल कुछ देने या चलाने से पहले पूछता है |
core/model |
साझा टाइप, जैसे actor और subject |
जब core को मॉड्यूल का डेटा छूना हो, तो मॉड्यूल wiring.go में core के साथ एक हुक रजिस्टर करता है। कुंजी बदलना इसी तरह काम करता है।
डेटा
| फ़ाइल | इसमें क्या है |
|---|---|
holyarrs.db |
लाइब्रेरी, रिक्वेस्ट, सेटिंग और बाकी सब कुछ जो मायने रखता है |
holyarrs-events.db |
हिस्ट्री और इवेंट की दूसरी लाइनें। यह बढ़ती है और मुख्य फ़ाइल को छुए बिना छाँटी जाती है |
माइग्रेशन core/database/migrations/main और core/database/migrations/events में नंबर वाली SQL फ़ाइलें हैं। ये शुरू होते समय चलती हैं।
इससे जुड़े पेज
इससे जुड़े पेज का लिंकHolyArrs मुफ़्त है। अगर इससे आपका समय बचा, तो GitHub पर स्टार दें, स्पॉन्सर करें या मुझे एक कॉफ़ी पिलाएं।