আর্কিটেকচার
বিশেষজ্ঞ
বড় কোনো বদল করার আগে জেনে নিন কোড কোথায় থাকে এবং কোন নিয়ম খাটে।
সংক্ষেপে
সংক্ষেপে-এর লিংক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 নিজের ঘরেই থাকে। শুধু মডিউলের নিজের
store*.goফাইলে SQL থাকে, এবং শুধু নিজের টেবিলের ওপর। অন্য মডিউলের সারি পড়তে তার সার্ভিসকে ডাকুন। - শেয়ার করা টেবিল core-এর।
settings,schedules,secrets,jobsওeventscore-এর হেল্পারের মাধ্যমে ধরুন। - বাইরে যাওয়ার একটাই পথ। বাইরের প্রতিটি কল
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-এ স্টার দিন, স্পনসর করুন অথবা এক কাপ কফি কিনে দিন।