इसे छोड़कर कंटेंट पर जाएं

मॉड्यूल

एक्सपर्ट

वह मॉड्यूल चुनें जिसमें आपका बदलाव आता है, और जानें कि वह किन मॉड्यूल को कॉल कर सकता है।

शुरू करने से पहले

शुरू करने से पहले का लिंक
  • फ़ोल्डर के नक्शे और नियमों के लिए आर्किटेक्चर पढ़ें।
  • हर मॉड्यूल का नाम app/backend/internal/<module>/ में वही होता है, और जब उसके स्क्रीन या ब्राउज़र टेस्ट हों तो app/frontend/src/lib/<module>/ और app/tests/<module>/ में भी।

सही मॉड्यूल खोजें

सही मॉड्यूल खोजें का लिंक
मॉड्यूल क्या करता है
requests माँगना, मंज़ूरी, रिक्वेस्ट के नियम, बाहरी सूचियाँ, रिपोर्ट
movies फ़िल्म के टाइटल, एडिशन, सेट, खोज और व्यवस्थित करना
shows शो, सीज़न, एपिसोड, खोज और व्यवस्थित करना
music कलाकार, एल्बम, ट्रैक, खोज और व्यवस्थित करना
sources सोर्स, Jackett और Prowlarr का ब्रिज, रिलीज़ की खोज
downloads डाउनलोडर, कतार, देखी जा चुकी फ़ाइलें, पाथ मैप, टैग, कॉपी के विकल्प
subtitles सबटाइटल की भाषाएं, साइट, मिलान और सेव करना
discover एक्सप्लोर, Popular, खोज, People, कैलेंडर, टाइटल के पेज
suggest लाइनें और शेल्फ़ चुनना और क्रम में लगाना (सिर्फ़ बैकएंड)
mediafiles कैटलॉग के रिकॉर्ड, चुनाव के नियम, नाम देना, डेटा पैक, मीडिया की जानकारी
importer फ़ाइल इंपोर्ट: अनपैक करना, टैग, मिलान (सिर्फ़ बैकएंड)
library लाइब्रेरी फ़ोल्डर, अपनाना और नाम बदलना (सिर्फ़ बैकएंड)
metadata बाहरी डेटा का क्लाइंट, संगीत की लुकअप, रेटिंग की सीढ़ियाँ, ट्रेलर
mediaservers Plex, Jellyfin और Emby को दोबारा देखने के लिए कहना
accounts यूज़र, साइन-इन, सिंगल साइन-ऑन, AI ऐप साइन-इन, बच्चों की सीमाएं, देखने के विकल्प
alerts अलर्ट चैनल और वे कब बोलते हैं
migrate पुराने ऐप से डेटा लाना
arrapi Sonarr और Radarr जैसा API
ai AI ऐप के कनेक्शन (रोका हुआ)
backups बैकअप बनाना, रखना और रीस्टोर करना
health हेल्थ चेक, doctor, सपोर्ट बंडल
updates अपडेट की जाँच और साइन की हुई अपडेट सूची
setup पहली बार का विज़ार्ड

एक मॉड्यूल सिर्फ़ निचली लेयर को इंपोर्ट करता है। discover को कोई इंपोर्ट नहीं करता। असली आधार tools/structurecheck/allow.go है।

लेयर मॉड्यूल
0 core
1 metadata, suggest
2 accounts
3 mediafiles
4 importer
5 library
6 sources
7 downloads
8 subtitles, mediaservers, alerts
9 movies, shows
10 requests, health
11 music, arrapi, migrate, ai, backups, updates, setup
13 discover

अगर आपके मॉड्यूल को ऊपर की लेयर से कुछ चाहिए, तो उसे इंपोर्ट न करें। ऊपर वाले मॉड्यूल से सादा डेटा नीचे भिजवाएं, या निचले मॉड्यूल में एक छोटा इंटरफ़ेस बनाएं जिसे wiring.go भरता है।

रूट या मॉड्यूल जोड़ें

रूट या मॉड्यूल जोड़ें का लिंक

इसे मॉड्यूल की routes.go में इसकी अनुमति के साथ रजिस्टर करें। openapi.json रूट से बनती है, और फ़र्क आने पर एक टेस्ट फ़ेल होता है। जारी हो चुके पाथ और फ़ील्ड के नाम वैसे ही रहते हैं। फ़ील्ड जोड़ें, उनका नाम कभी न बदलें। फिर go run ./app/backend/tools/apidoc से API रूट दोबारा लिखें।

पहले अपने बदलाव को इन 23 में बैठाने की कोशिश करें, और नया जोड़ने से पहले एक इशू खोलें। नए मॉड्यूल को अपना बैकएंड फ़ोल्डर चाहिए (और स्क्रीन हों तो lib/<module>/ और app/tests/<module>/ भी), tools/structurecheck में लेयर के क्रम में एक जगह, और wiring.go में एक लाइन।

लक्षण। TestModuleEdges फ़ेल होता है। वजह। कोई मॉड्यूल उसी या ऊपर की लेयर का मॉड्यूल इंपोर्ट कर रहा है। हल। ऊपर वाले मॉड्यूल से सादा डेटा नीचे भेजें, या एक छोटा इंटरफ़ेस जोड़ें जो wiring.go में जुड़ता है।

लक्षण। TestSQLOnlyInStore या TestTableOwnership फ़ेल होता है। वजह। SQL किसी store*.go फ़ाइल के बाहर है, या किसी और मॉड्यूल की टेबल को छू रहा है। हल। क्वेरी को टेबल के मालिक मॉड्यूल के स्टोर में ले जाएं और उस मॉड्यूल की सर्विस को ID से कॉल करें।

एक्सपर्ट के लिए

एक्सपर्ट के लिए का लिंक
और नियम
  • एक मॉड्यूल दूसरे मॉड्यूल का सिर्फ़ रूट पैकेज इंपोर्ट करता है।
  • स्टोर के फ़ंक्शन एक database.Querier लेते हैं। किसी और मॉड्यूल की लाइनें उसकी सर्विस से ID के ज़रिए पढ़ें, और ID की लंबी सूची json_each(?) के साथ एक JSON array के रूप में भेजें।
  • settings, schedules, secrets, jobs और events core के हैं। सेटिंग के हर ग्रुप का एक मालिक मॉड्यूल होता है। किसी और मॉड्यूल का ग्रुप बदलना हो, तो उसके मालिक को कॉल करें।
  • बाहर की हर कॉल core/outbound से होकर जाती है।
  • core के पैकेज कतारों में रखे हैं, ऊपर से नीचे: parts, webserver और startup, logs, jobs और model, outbound और secrets, फिर database, files और releasename। core का एक पैकेज सिर्फ़ अपनी कतार या उससे नीचे की कतार को इंपोर्ट करता है।
  • नाम: Go फ़ाइलें छोटे अक्षरों में अंडरस्कोर के साथ, Svelte हिस्से PascalCase में, और TypeScript, डॉक्स, टेस्ट और deploy की फ़ाइलें kebab-case में होती हैं। Python फ़ाइलों में अंडरस्कोर होते हैं ताकि उन्हें इंपोर्ट किया जा सके। app/ के फ़ोल्डर छोटे अक्षरों में, एक शब्द के होते हैं।
  • कोड का नाम खुलकर बदलें, पर जो कुछ स्टोर होता या भेजा जाता है उसका नाम वही रहता है: टेबल और कॉलम, सेटिंग की कुंजी, JSON फ़ील्ड, जॉब के नाम और स्विच के नाम।
  • कमेंट में रोडमैप नंबर, तारीख़, नाम या em dash नहीं होते।
रिकॉर्ड के मालिक
मालिक रिकॉर्ड
mediafiles Title, Item, Version, Slot, Part, File, LibraryFolder, Quality, PickRules
downloads Download, Downloader, SeenFile, PathMap
sources Source, Release
requests Ask, Report
accounts User
core/jobs Job, Schedule, JobError
core/database Event और साझा लाइन फ़ील्ड
जाँचें

जाँचें app/backend/tools/structurecheck में रहती हैं। ज़्यादातर को -tags structure चाहिए।

जाँच क्या सँभालती है
TestTopLayout रेपो के सबसे ऊपर के फ़ोल्डर
TestModuleSet, TestCoreSet, TestPackageMap internal/ और internal/core/ में जिन फ़ोल्डर की अनुमति है
TestModuleEdges लेयर का क्रम
TestModuleImportsRootOnly सिर्फ़ रूट पैकेज के इंपोर्ट
TestCoreImportsNoModule, TestCoreRowOrder, TestCoreNamesNoModuleTable core के इंपोर्ट, कतारों का क्रम और नाम
TestSQLOnlyInStore, TestTableOwnership, TestSQLAllowlistShrinks, TestSeedSQLAllowlist SQL की जगह और टेबल के मालिक
TestGoFileNames, TestNoBannedPackageNames फ़ाइल और पैकेज के नाम
TestFileSizeCap, TestCorePackageSize फ़ाइल और core पैकेज का साइज़
TestCommentHygiene ऊपर दिए कमेंट के नियम
TestRouteTableUnchanged, TestMigrationsUnchanged, TestHeaderAndJSONLiteralsUnchanged कोड इधर-उधर करने से कोई रूट, माइग्रेशन, HTTP हेडर का नाम या JSON कुंजी नहीं बदलती
TestNoOldPageAddresses, TestNoOldPagesInTestsOrDocs पुराने पेज एड्रेस कोड, टेस्ट और डॉक्स से बाहर ही रहते हैं
TestNoDependencyBotConfig .github में डिपेंडेंसी बॉट की कोई फ़ाइल नहीं

HolyArrs मुफ़्त है। अगर इससे आपका समय बचा, तो GitHub पर स्टार दें, स्पॉन्सर करें या मुझे एक कॉफ़ी पिलाएं।