| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| উচ্চ | user.service.js-এ deleteAccount ট্রানজ্যাকশন ছাড়া সিকোয়েন্সিয়ালভাবে চলে — আংশিক ব্যর্থতায় ডেটা দূষিত হয় |
MongoDB ট্রানজ্যাকশনে মোড়ানো |
| উচ্চ | পুরনো অ্যাভাটার ফাইল মুছে ফেলা হয় না — ডিস্কে জমা হয় | নতুন ফাইল সেভের আগে পুরনো ফাইল ডিলিট করুন |
| মাঝারি | gemini.config.js-এ Pino লগারের পরিবর্তে console.error ব্যবহার করা হয়েছে |
logger.error দিয়ে প্রতিস্থাপন |
| নিম্ন | chatStream-এ AI স্ট্রিম error handling জটিল |
error propagation সহজ করা |
| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| উচ্চ | Access token localStorage-এ রাখা হয়েছে (XSS ঝুঁকিপূর্ণ) |
httpOnly কুকিতে refresh token-এর পাশাপাশি রাখা |
| মাঝারি | কুকি-ভিত্তিক auth-এর জন্য CSRF সুরক্ষা নেই | CSRF টোকেন বা double-submit কুকি প্যাটার্ন যোগ করা |
| মাঝারি | user.service.js সরাসরি মডেল ইম্পোর্ট করে (repo layer এড়িয়ে যায়) |
রিপোজিটরি ব্যবহার করা |
| নিম্ন | ধ্বংসাত্মক DELETE এন্ডপয়েন্টে (/api/user/data, /api/user/account) পাসওয়ার্ড নিশ্চিতকরণ নেই |
কনফার্মেশন ফিল্ড ভ্যালিডেশন যোগ করা |
| নিম্ন | Rate limit 200/ঘণ্টা ড্যাশবোর্ডের জন্য সীমাবদ্ধ | 1000/ঘণ্টা বা কনফিগারেবল করা |
| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| উচ্চ | প্রতিটি মডিউলে validate মিডলওয়্যার ৫ বার ডুপ্লিকেট |
middleware/validate.js-এ একত্রিত করা |
| মাঝারি | auth.controller.getCurrentUser সরাসরি authRepository কল করে (service layer এড়িয়ে) |
authService-এর মাধ্যমে রুট করা |
| মাঝারি | Expense ক্যাটাগরি দুটি জায়গায় magic string হিসেবে সংজ্ঞায়িত (model + validation) | শেয়ার্ড কনস্ট্যান্ট তৈরি করা |
| মাঝারি | prompt.builder.js সরাসরি saleService/expenseService ইম্পোর্ট করে (ক্রস-মডিউল কাপলিং) |
ডেডিকেটেড analytics service তৈরি করা |
| মাঝারি | authorizeRole মিডলওয়্যার থাকলেও কোথাও ব্যবহার হয় না |
অ্যাডমিন রুটে role-based access প্রয়োগ |
| নিম্ন | কন্ট্রোলারে অব্যবহৃত export | পরিষ্কার করা |
| অগ্রাধিকার | ফিচার | বিবরণ |
|---|---|---|
| মাঝারি | Dashboard API এন্ডপয়েন্ট (/api/dashboard) |
sales analytics + expense summary + product stats একত্রিত করা |
| মাঝারি | ইমেইল ভেরিফিকেশন ফ্লো | রেজিস্ট্রেশনে ভেরিফিকেশন ইমেইল পাঠানো |
| মাঝারি | পাসওয়ার্ড রিসেট ফ্লো | forgot/reset পাসওয়ার্ড এন্ডপয়েন্ট |
| নিম্ন | PDF ইনভয়েস জেনারেশন | ANALYSIS.md-এ উল্লেখিত |
| নিম্ন | CSV ডেটা এক্সপোর্ট ব্যাকএন্ড এন্ডপয়েন্ট | সার্ভার-সাইড CSV জেনারেশন |
| নিম্ন | অডিট লগিং | ইউজার অপারেশন ট্র্যাক করা |
| নিম্ন | বাল্ক অপারেশন (ইম্পোর্ট/ডিলিট) | CSV প্রোডাক্ট ইম্পোর্ট, বাল্ক ডিলিট |
| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| উচ্চ | কন্ট্রোলার, সার্ভিস, রিপোজিটরি, মডেল, মিডলওয়্যার, রুটের জন্য শূন্য টেস্ট | প্রতিটি মডিউলের জন্য ইন্টিগ্রেশন টেস্ট যোগ করা |
| উচ্চ | ফ্রন্টএন্ডে শূন্য টেস্ট | Vitest + React Testing Library সেটআপ |
| মাঝারি | মাত্র ৫টি ইউটিলিটি টেস্ট আছে | ইউটিলিটি কভারেজ বাড়ানো |
| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| মাঝারি | localStorage-এ সম্পূর্ণ ইউজার অবজেক্ট রাখা (সংবেদনশীল ডেটা) | শুধু প্রয়োজনীয় ফিল্ড রাখা (id, name, role) |
| মাঝারি | হার্ডকোডেড USD কারেন্সি ফরম্যাটিং | env/context-এর মাধ্যমে কনফিগারেবল করা |
| নিম্ন | Zod ব্যবহার করে ফ্রন্টএন্ড ফর্ম ভ্যালিডেশন নেই (@hookform/resolvers থাকা সত্ত্বেও) |
ফর্মে Zod স্কিমা যোগ করা |
| নিম্ন | অ্যাক্সেসিবিলিটি (a11y) অডিট নেই | ARIA লেবেল, কীবোর্ড ন্যাভিগেশন যোগ করা |
| অগ্রাধিকার | সমস্যা | সমাধান |
|---|---|---|
| মাঝারি | /api/products/low-stock সব রেজাল্ট রিটার্ন করে (পেজিনেশন নেই) |
পেজিনেশন যোগ করা |
| নিম্ন | AI কনটেক্সট সবসময় শেষ ৩০ দিনের ডেটা আনে (কোয়েরির সময়কাল নির্বিশেষে) | ইউজার কোয়েরি থেকে সময় পরিসীমা পার্স করা |
- পর্ব ১ — জটিল বাগ + নিরাপত্তা (access token কুকিতে) + Validate মিডলওয়্যার একত্রিকরণ
- পর্ব ২ — আর্কিটেকচার উন্নতি (service layer বিশুদ্ধতা, শেয়ার্ড কনস্ট্যান্ট, role enforcement)
- পর্ব ৩ — টেস্টিং (ব্যাকএন্ড ইন্টিগ্রেশন টেস্ট + ফ্রন্টএন্ড সেটআপ)
- পর্ব ৪ — অনুপস্থিত ফিচার (dashboard endpoint, email/password flows)
- পর্ব ৫ — ফ্রন্টএন্ড পলিশ + পারফরম্যান্স + Nice-to-haves