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

আর্কিটেকচার

বিশেষজ্ঞ

বড় কোনো বদল করার আগে জেনে নিন কোড কোথায় থাকে এবং কোন নিয়ম খাটে।

HolyArrs একটি Go প্রোগ্রাম, যার ভেতরে ওয়েব অ্যাপ বিল্ট-ইন। এটি পোর্ট 6262-এ ওয়েব অ্যাপ এবং একটি JSON API চালায়, আর কনফিগ ফোল্ডারের 2টি SQLite ফাইলে ডেটা রাখে। এটি ডাউনলোডার, সোর্স (Jackett বা Prowlarr-এর মাধ্যমে), মিডিয়া সার্ভার, অ্যালার্ট চ্যানেল এবং HolyArrs মেটাডেটা সার্ভারের সঙ্গে যোগাযোগ করে।

একটি অনুরোধ অনুসরণ করুন। কেউ এক্সপ্লোর পেজে একটি মুভি চাইল।

  1. requests অনুরোধটি রেকর্ড করে।
  2. অনুমোদনের পর movies রিলিজের জন্য sources-কে বলে।
  3. mediafiles-এর বাছাইয়ের নিয়ম সেগুলোর স্কোর দেয়।
  4. downloads সেরাটি ডাউনলোডারে পাঠায়।
  5. শেষ হলে mediafiles ফাইলটি ইমপোর্ট করে।
  6. mediaservers ও alerts-কে জানানো হয়।

কোডের মানচিত্র

কোডের মানচিত্র-এর লিংক
app/backend/cmd/holyarrs/ main.go starts the program; wiring.go builds the modules and joins them
app/backend/internal/<module>/ one flat folder per module
app/backend/internal/core/ plumbing every module may use
app/backend/tools/ dev-only programs
app/frontend/ the SvelteKit web app; embed.go bundles its build
app/frontend/src/routes/<page>/ thin pages that combine module parts
app/frontend/src/lib/<module>/ each module's web code
app/frontend/src/lib/ui/ parts used by 2 or more modules, and nothing else
app/frontend/src/lib/core/ server client, app state, helpers
app/tests/ end-to-end tests (Playwright)
deploy/ the Dockerfile and release scripts
docs/ guides and these pages

go.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 নিজের ঘরেই থাকে। শুধু মডিউলের নিজের store*.go ফাইলে SQL থাকে, এবং শুধু নিজের টেবিলের ওপর। অন্য মডিউলের সারি পড়তে তার সার্ভিসকে ডাকুন।
  • শেয়ার করা টেবিল 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 অ্যাক্টর ও সাবজেক্টের মতো শেয়ার করা টাইপ

Core-কে যখন মডিউলের ডেটা ছুঁতে হয়, তখন মডিউলটি wiring.go-তে core-এর কাছে একটি হুক নিবন্ধন করে। কী পাল্টানো এভাবেই কাজ করে।

ডেটা
ফাইল যা থাকে
holyarrs.db লাইব্রেরি, অনুরোধ, সেটিংস এবং আর যা কিছু গুরুত্বপূর্ণ
holyarrs-events.db হিস্ট্রি ও অন্য ইভেন্টের সারি। এটি বাড়ে এবং মূল ফাইল না ছুঁয়েই ছাঁটা হয়

মাইগ্রেশন হলো নম্বর দেওয়া SQL ফাইল, থাকে core/database/migrations/main ও core/database/migrations/events-এ। এগুলো চালু হওয়ার সময় চলে।

HolyArrs বিনামূল্যে। এটি আপনার সময় বাঁচিয়ে থাকলে GitHub-এ স্টার দিন, স্পনসর করুন অথবা এক কাপ কফি কিনে দিন।