সরাসরি প্রধান সামগ্রীতে চলে যান

স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপ তৈরি (মাইক্রোসার্ভিস পার্ট ৬)

ভূমিকা

এই ভিডিওটিতে আমরা শিখব কীভাবে স্প্রিং বুট (Spring Boot) ব্যবহার করে একটি কুইজ অ্যাপ্লিকেশনের জন্য Quiz Service তৈরি করা যায়। আগের পর্বগুলোতে আমরা প্রশ্ন (Questions) নিয়ে কাজ করেছি, আর এই পর্বে আমরা সেই প্রশ্নগুলোকে একত্রিত করে একটি নির্দিষ্ট বিষয়ের ওপর কুইজ তৈরি করার লজিক দেখব। মূলত ডেটাবেসে কীভাবে কুইজ এবং প্রশ্নের মধ্যে সম্পর্ক তৈরি করা হয় এবং কুইজ সেভ করা হয়, সেটিই এখানে মূল আলোচনার বিষয়।


কুইজ সার্ভিস এবং ডেটা মডেল তৈরি (Quiz Service & Model)

এই অংশে কুইজের জন্য প্রয়োজনীয় ক্লাস এবং সার্ভিস তৈরি করা হয়েছে।

রেফারেন্স: [00:22]

বিস্তারিত আলোচনা: একটি কুইজ তৈরি করতে হলে আমাদের একটি Quiz ক্লাস দরকার। এই ক্লাসে মূলত তিনটি জিনিস থাকে:

  1. ID: কুইজের একটি ইউনিক নম্বর (Primary Key)।

  2. Title: কুইজের নাম (যেমন: Java Quiz 1)।

  3. Questions: ওই কুইজের আন্ডারে থাকা প্রশ্নগুলোর একটি তালিকা।

সহজ ব্যাখ্যা: * Entity (এনটিটি): জাভাতে যখন আমরা কোনো ক্লাসকে ডেটাবেস টেবিলের সাথে যুক্ত করি, তখন তাকে এনটিটি বলে।

  • Lombok (লম্বক): এটি একটি লাইব্রেরি যা কোডে বারবার Getter এবং Setter মেথড লেখার ঝামেলা কমিয়ে দেয়।

মেনি-টু-মেনি রিলেশনশিপ (Many-to-Many Relationship)

এখানে কুইজ এবং প্রশ্নের মধ্যে সম্পর্ক স্থাপনের উপায় নিয়ে আলোচনা করা হয়েছে।

রেফারেন্স: [01:57]

বিস্তারিত আলোচনা: একটি কুইজে অনেকগুলো প্রশ্ন থাকতে পারে, আবার একটি প্রশ্ন বিভিন্ন কুইজে থাকতে পারে। এই ধরণের সম্পর্ককে ডেটাবেসের ভাষায় Many-to-Many বলা হয়। এর ফলে ডেটাবেসে একটি নতুন টেবিল তৈরি হয় যা কুইজ আইডি এবং প্রশ্ন আইডির ম্যাপিং ধরে রাখে।


কুইজ দাও (Quiz DAO) এবং রিপোজিটরি

ডেটাবেসের সাথে কথা বলার জন্য আমাদের একটি ইন্টারফেস দরকার।

রেফারেন্স: [02:31]

বিস্তারিত আলোচনা: QuizDao ইন্টারফেসটি JpaRepository কে এক্সটেন্ড (Extend) করে। এর ফলে আমাদের নিজে থেকে ডেটাবেসে ডাটা সেভ বা ডিলিট করার কোড লিখতে হয় না, স্প্রিং জেপিএ (Spring JPA) নিজেই তা করে দেয়।


কাস্টম কুয়েরি দিয়ে প্রশ্ন খোঁজা (Custom Query)

নির্দিষ্ট ক্যাটাগরি থেকে কিছু সংখ্যক র‍্যান্ডম (Random) প্রশ্ন তোলার জন্য আমরা কাস্টম কুয়েরি ব্যবহার করেছি।

রেফারেন্স: [08:45]

বিস্তারিত আলোচনা: সব প্রশ্ন তো আর এক কুইজে দেওয়া যাবে না। তাই আমরা ক্যাটাগরি অনুযায়ী নির্দিষ্ট সংখ্যক প্রশ্ন ডাইনামিকভাবে তুলে আনি। এর জন্য @Query অ্যানোটেশন ব্যবহার করে SQL এর মতো কুয়েরি লেখা হয়েছে।

কোড উদাহরণ:

Java

@Query(value = "SELECT * FROM question q WHERE q.category=:category ORDER BY RANDOM() LIMIT :numQ", nativeQuery = true)
List<Question> findRandomQuestionsByCategory(String category, int numQ); 

ব্যাখ্যা:

  • SELECT * FROM question: প্রশ্ন টেবিল থেকে সব ডাটা নাও।

  • WHERE q.category=:category: শুধুমাত্র ওই ক্যাটাগরির প্রশ্ন নাও যা ইউজার চেয়েছে।

  • ORDER BY RANDOM(): প্রশ্নগুলোকে এলোমেলো করে দাও যাতে প্রতিবার নতুন সেট পাওয়া যায়।

  • LIMIT :numQ: ব্যবহারকারী যতগুলো প্রশ্ন চেয়েছে (যেমন ৫টি বা ১০টি), ঠিক ততগুলোই দাও।


কুইজ তৈরির লজিক (Creating Quiz Logic)

সার্ভিস লেয়ারে কুইজ অবজেক্ট তৈরি এবং সেভ করার ধাপ।

রেফারেন্স: [06:27]

বিস্তারিত আলোচনা: কন্ট্রোলার থেকে ক্যাটাগরি, প্রশ্নের সংখ্যা এবং কুইজের নাম আসার পর সার্ভিস মেথডটি প্রথমে ডেটাবেস থেকে ওই ক্যাটাগরির র‍্যান্ডম প্রশ্নগুলো খুঁজে বের করে। এরপর একটি নতুন কুইজ অবজেক্ট তৈরি করে তাতে প্রশ্নগুলো সেট করে এবং শেষে quizDao.save(quiz) দিয়ে ডেটাবেসে জমা রাখে।


বিশ্লেষণ ও লেখকের ভাবনা (Analysis & Perception)

বাস্তব প্রেক্ষাপট: বাস্তব জীবনে একটি বড় কুইজ প্ল্যাটফর্ম (যেমন: Coursera বা Udemy) এভাবেই কাজ করে। সেখানে হাজার হাজার প্রশ্নের মধ্য থেকে সিস্টেম স্বয়ংক্রিয়ভাবে প্রশ্ন সেট তৈরি করে।

বিকল্প ও পরামর্শ:

  • Exception Handling: ভিডিওতে বলা হয়েছে এক্সেপশন হ্যান্ডেলিং পরে করা হবে। তবে প্রোডাকশন লেভেল অ্যাপে সবসময় try-catch ব্লক ব্যবহার করা উচিত যাতে ডেটাবেসে কোনো ভুল হলে অ্যাপ ক্রাশ না করে।

  • Performance: যদি ডাটাবেসে লাখ লাখ ডাটা থাকে, তবে ORDER BY RANDOM() কিছুটা ধীর হতে পারে। সেক্ষেত্রে অন্য কোনো অ্যালগরিদম দিয়ে প্রশ্ন বাছাই করা ভালো।

মূল উদ্দেশ্য: কন্টেন্ট ক্রিয়েটর এখানে মূলত মাইক্রোসার্ভিস আর্কিটেকচারের একটি ছোট অংশ অর্থাৎ কীভাবে ডেটা ম্যাপিং এবং কাস্টম কুয়েরি কাজ করে তা প্র্যাকটিক্যালি দেখাতে চেয়েছেন।

ভিডিও লিংক: YouTube Video Link

[

Quiz App Using Spring Boot #6 | Microservices Tutorial

Telusko · 33K views

](http://www.youtube.com/watch?v=6tzuXRFliqo)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...