বিষয়বস্তুতে যান

মডিউল

বিশেষজ্ঞ

আপনার বদল কোন মডিউলের, তা বেছে নিন, এবং জানুন সেটি কোন কোন মডিউলকে ডাকতে পারে।

  • ফোল্ডারের মানচিত্র ও নিয়মের জন্য আর্কিটেকচার পড়ুন।
  • প্রতিটি মডিউলের নাম 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 ও events core-এর। প্রতিটি সেটিংস গ্রুপের একজন মালিক মডিউল আছে। অন্য মডিউলের গ্রুপ বদলাতে তার মালিককে ডাকুন।
  • বাইরের প্রতিটি কল 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-এ স্টার দিন, স্পনসর করুন অথবা এক কাপ কফি কিনে দিন।