মডিউল
বিশেষজ্ঞ
আপনার বদল কোন মডিউলের, তা বেছে নিন, এবং জানুন সেটি কোন কোন মডিউলকে ডাকতে পারে।
শুরু করার আগে
শুরু করার আগে-এর লিংক- ফোল্ডারের মানচিত্র ও নিয়মের জন্য আর্কিটেকচার পড়ুন।
- প্রতিটি মডিউলের নাম
app/backend/internal/<module>/-তে একই থাকে। স্ক্রিন বা ব্রাউজার টেস্ট থাকলেapp/frontend/src/lib/<module>/ওapp/tests/<module>/-তেও একই নাম।
সঠিক মডিউল খুঁজুন
সঠিক মডিউল খুঁজুন-এর লিংক| মডিউল | কী করে |
|---|---|
requests |
চাওয়া, অনুমোদন, অনুরোধের নিয়ম, বাইরের তালিকা, রিপোর্ট |
movies |
মুভি টাইটেল, এডিশন, সেট, সার্চ ও গোছানো |
shows |
সিরিজ, সিজন, পর্ব, সার্চ ও গোছানো |
music |
শিল্পী, অ্যালবাম, ট্র্যাক, সার্চ ও গোছানো |
sources |
সোর্স, Jackett ও Prowlarr ব্রিজ, রিলিজ সার্চ |
downloads |
ডাউনলোডার, সারি, দেখা ফাইল, পাথ ম্যাপ, ট্যাগ, কপির বিকল্প |
subtitles |
সাবটাইটেলের ভাষা, সাইট, মেলানো ও সেভ করা |
discover |
এক্সপ্লোর, পপুলার, সার্চ, মানুষ, ক্যালেন্ডার, টাইটেল পেজ |
suggest |
সারি ও শেল্ফ বাছা ও সাজানো (শুধু ব্যাকএন্ড) |
mediafiles |
ক্যাটালগ রেকর্ড, বাছাইয়ের নিয়ম, নাম দেওয়া, ডেটা প্যাক, মিডিয়ার বিবরণ |
importer |
ফাইল ইমপোর্ট: আনপ্যাক, ট্যাগ, মেলানো (শুধু ব্যাকএন্ড) |
library |
লাইব্রেরি ফোল্ডার, গ্রহণ করা ও নাম বদলানো (শুধু ব্যাকএন্ড) |
metadata |
বাইরের ডেটা ক্লায়েন্ট, গানের খোঁজ, রেটিং ধাপ, ট্রেলার |
mediaservers |
Plex, Jellyfin ও Emby-কে আবার দেখতে বলা |
accounts |
ইউজার, সাইন ইন, সিঙ্গেল সাইন-অন, AI অ্যাপ সাইন ইন, বাচ্চাদের সীমা, দেখার বিকল্প |
alerts |
অ্যালার্ট চ্যানেল এবং কখন সেগুলো বার্তা পাঠায় |
migrate |
আগের অ্যাপ থেকে ডেটা নিয়ে আসা |
arrapi |
Sonarr ও Radarr ধাঁচের API |
ai |
AI অ্যাপের সংযোগ (আটকে রাখা) |
backups |
ব্যাকআপ বানানো, রাখা ও রিস্টোর করা |
health |
হেলথ চেক, ডক্টর, সাপোর্ট বান্ডেল |
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 অ্যারে হিসেবে পাঠান। settings,schedules,secrets,jobsওeventscore-এর। প্রতিটি সেটিংস গ্রুপের একজন মালিক মডিউল আছে। অন্য মডিউলের গ্রুপ বদলাতে তার মালিককে ডাকুন।- বাইরের প্রতিটি কল
core/outboundদিয়ে যায়। - Core প্যাকেজগুলো ওপর থেকে নিচে সারিতে বসে:
parts,webserverওstartup,logs,jobsওmodel,outboundওsecrets, তারপরdatabase,filesওreleasename। একটি core প্যাকেজ শুধু নিজের সারি বা নিচের সারির প্যাকেজ ইমপোর্ট করে। - নাম: Go ফাইল ছোট হাতের অক্ষরে আন্ডারস্কোর দিয়ে, Svelte অংশ PascalCase-এ, আর TypeScript, ডক, টেস্ট ও ডিপ্লয় ফাইল 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-এ স্টার দিন, স্পনসর করুন অথবা এক কাপ কফি কিনে দিন।