গত কয়েকদিন ধরে শুধু tutorial follow করিনি, বরং হাতে-কলমে একটা Laravel marketplace project বানানোর চেষ্টা করেছি, সাথে React-এও কিছু practical জিনিস ঘেঁটেছি। কিছু জায়গায় আটকেওছি, সেই আটকানোটাও লিখে রাখলাম, কারণ শেখার আসল অংশটা ওখানেই ছিল।
Laravel দিয়ে শুরু করেছি একদম basic থেকে — Route, Controller, View, আর Blade। Route থেকে Controller-এ request যাওয়া, Controller থেকে View-তে data পাঠানো, তারপর Blade-এ variable, loop আর condition বসানো — এই পুরো flowটা বারবার হাতে করে দেখেছি যাতে muscle memory-তে ঢুকে যায়। সাথে basic form validation নিয়েও কাজ করেছি।
এরপর আসল মজার অংশ শুরু হয় — PostgreSQL দিয়ে একটা marketplace ধরনের project-এর database design করা। Project-এ চারটা role রাখার plan করেছি: Admin, Moderator, Seller, Buyer। একটা গুরুত্বপূর্ণ business rule হলো, seller নিজের product নিজে কিনতে পারবে না, কিন্তু অন্য কোনো seller-এর product কিনতে কোনো বাধা নেই। আরেকটা rule হলো — seller product দিলেই সেটা সাথে সাথে সবাই দেখতে পাবে না; Admin বা Moderator approve করার পরই সেটা buyer-দের কাছে visible হবে।
মাইগ্রেশন লেভেলে গিয়ে এই rule গুলো বাস্তবায়ন করাটাই আসল শেখা হয়েছে। users table-এ role নামে একটা field যোগ করেছি, default value রেখেছি buyer। এরপর products table বানিয়েছি যেখানে seller_id, title, description, price, stock, status, approved_by আর approved_at-এর মতো field রেখেছি। product-এর status শুরুতে pending রাখা হয়েছে, যাতে পরে approval flow বসানো যায়।
migration-এর up() আর down() method, foreign key, nullable field, default value, আর relationship — এই concept গুলো এবার আগের চেয়ে অনেক বেশি clear হয়েছে, কারণ শুধু syntax মুখস্থ করিনি, একটা বাস্তব business logic-এর সাথে মিলিয়ে বুঝেছি। যেমন seller delete হলে তার product গুলোও cascade হয়ে delete হয়ে যাবে, কিন্তু approver (Admin/Moderator) delete হলে approved_by field শুধু null হয়ে যাবে, product delete হবে না — এই পার্থক্যটা database design-এ কেন গুরুত্বপূর্ণ সেটা এখন বুঝি।
একটা সমস্যাও পেয়েছিলাম — Laravel-এর db:table command চালাতে গিয়ে দেখি PHP-এর intl extension missing। প্রথমে বুঝিনি সমস্যাটা কোথায়, পরে error message ভালোভাবে পড়ে বুঝলাম extension enable করতে হবে। এই ধরনের ছোটখাটো environment সমস্যা আমার কাছে code লেখার মতোই গুরুত্বপূর্ণ শেখা মনে হয়, কারণ real project-এ এগুলো প্রতিনিয়ত সামনে আসবে।
React side-এ কাজ করেছি useState আর useEffect নিয়ে, TVMaze API ব্যবহার করে show/movie data fetch করার মাধ্যমে। এখানে সবচেয়ে বড় শেখাটা ছিল fetch response.ok চেক না করলে কী সমস্যা হতে পারে — fetch শুধু network fail হলেই reject করে, server থেকে 404 বা 500 আসলে reject করে না। তাই response.ok check করে না হলে নিজে error throw করা শিখেছি, আর পুরো request-টা try/catch/finally দিয়ে wrap করেছি যাতে loading আর error state আলাদাভাবে সামলানো যায়।
একটা ছোট কিন্তু interesting bug-ও পেয়েছিলাম — useEffect-এর মধ্যে state log করলে setMovies কল করার পরও console-এ পুরনো value দেখাচ্ছিল। প্রথমে মনে হয়েছিল state update হচ্ছে না, পরে বুঝলাম আসলে React-এর re-render cycle-এর কারণে ওই সময়ে এখনো পুরনো closure-এর value দেখাচ্ছে। এই জিনিসটা debug করার সময় React-এর state আর rendering কীভাবে কাজ করে সেটা আরেকটু গভীরভাবে বুঝেছি।
এই কয়েকদিনের সবচেয়ে বড় realization হলো — framework শেখা মানে syntax মুখস্থ করা না। Route, Controller, Migration, Database relationship, API call, state, error handling — সবগুলো একসাথে একটা real application-এর মধ্যে কাজ করলে তবেই আসল বোঝাটা হয়। এখন plan হলো এই foundation-এর উপর দাঁড়িয়ে marketplace project-এর বাকি অংশ (approval flow, seller dashboard) implement করা, আর React-এর data fetching pattern আরও practice করা।
কাস্টম ওয়েব অ্যাপ বা এআই অটোমেশন বানাতে চান?
আমি স্টার্টআপ ও আধুনিক ব্যবসার জন্য স্কেলেবল ফুল-স্ট্যাক ওয়েব অ্যাপ্লিকেশন (Next.js, React, Node, PostgreSQL) এবং ইন্টেলিজেন্ট এআই এজেন্ট সলিউশন তৈরি করি। আপনার প্রজেক্টের আইডিয়া নিয়ে কথা বলা যাক!
আর্টিকেলটি কি আপনার ভালো লেগেছে?
তন্ময়ের কাজকে সাপোর্ট করতে তালি (Clap) দিয়ে উৎসাহিত করুন!
জাহিদ হাসান তন্ময়
সফটওয়্যার ডেভেলপার
MERN ফুল-স্ট্যাক ডেভেলপার এবং AI এজেন্ট ডেভেলপার, ঢাকা, বাংলাদেশ। ওয়েব ডেভেলপমেন্ট, রিঅ্যাক্ট, লারাভেল এবং আমার লার্নিং জার্নি নিয়ে লিখছি।
