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

স্প্রিং বুট মাইক্রোসার্ভিস দিয়ে কুইজ অ্যাপে ডেটা ফেচ করা

Introduction

এই কন্টেন্টটি মূলত একটি Quiz Application তৈরির সিরিজ টিউটোরিয়ালের অংশ। এখানে শেখানো হয়েছে কীভাবে ডেটাবেস থেকে একটি নির্দিষ্ট কুইজের প্রশ্নগুলো খুঁজে বের করে (fetch) ব্যবহারকারীর সামনে উপস্থাপন করা যায়। বিশেষ করে সিকিউরিটি বা নিরাপত্তার কথা মাথায় রেখে, কীভাবে সঠিক উত্তর (Right Answer) লুকিয়ে রেখে শুধু প্রশ্ন এবং অপশনগুলো ইউজারকে পাঠানো হয়, তা এখানে বিস্তারিত দেখানো হয়েছে।


কুইজ ডেটা ফেচ করার প্রক্রিয়া (Fetching Quiz Data)

আগের পর্বে কুইজ তৈরি করা হয়েছিল, এবার সেই কুইজটিকে আইডি (ID) দিয়ে খুঁজে বের করার পালা।

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

বিস্তারিত আলোচনা: যখন আমরা একটি কুইজ তৈরি করি, তখন সেটি ডেটাবেসের quiz এবং quiz_questions টেবিলে জমা হয়। এখন একজন ইউজার যখন কোনো কুইজে অংশ নিতে চাইবে, তখন আমাদের এমন একটি সিস্টেম দরকার যা ওই কুইজের আইডি অনুযায়ী সব প্রশ্ন তুলে আনবে।

সহজ ভাষায় ব্যাখ্যা: মনে করুন, একটি লাইব্রেরিতে অনেকগুলো বইয়ের তাক আছে। প্রতিটি তাকের একটি নম্বর (ID) আছে। আপনি যখন লাইব্রেরিয়ানকে বলবেন "আমাকে ২ নম্বর তাকের বইগুলো দাও", তখন তিনি আপনাকে শুধু ওই তাকের বইগুলোই দেবেন। এখানে কোডিংয়ের মাধ্যমে আমরা ঠিক এই কাজটিই করছি।


কন্ট্রোলার সেটআপ এবং পাথ ভেরিয়েবল (Controller & Path Variable)

ইউজার যখন কোনো রিকোয়েস্ট পাঠাবে, সেটি হ্যান্ডেল করার জন্য কন্ট্রোলারে একটি মেথড তৈরি করতে হয়।

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

কোড স্নিপেট:

Java

@GetMapping("get/{id}")
public ResponseEntity<List<QuestionWrapper>> getQuizQuestions(@PathVariable Integer id) {
    return quizService.getQuizQuestions(id);
} 

ব্যাখ্যা:

  • @GetMapping("get/{id}"): এটি একটি নির্দিষ্ট ইউআরএল (URL) তৈরি করে। {id} অংশটি পরিবর্তনশীল, অর্থাৎ ইউজার এখানে ১, ২ বা ৩ যেকোনো নম্বর দিতে পারে।

  • @PathVariable: ইউআরএল থেকে ওই আইডি নম্বরটি সংগ্রহ করে কোডের ভেতরে ব্যবহার করার জন্য এটি লাগে।

  • ResponseEntity: এটি ব্যবহার করা হয় যাতে আমরা রেজাল্টের সাথে সাথে এইচটিটিপি স্ট্যাটাস (যেমন: OK বা 404) পাঠাতে পারি।


কোয়েশ্চেন র‍্যাপার: নিরাপত্তার জন্য বিশেষ ক্লাস (Question Wrapper for Security)

ডেটাবেসে প্রশ্নের সাথে সঠিক উত্তরও থাকে। কিন্তু ইউজারকে যদি প্রশ্ন পাঠানোর সময় উত্তরও পাঠিয়ে দেওয়া হয়, তবে সে সহজেই চিটিং করতে পারবে। এটি ঠেকানোর জন্য QuestionWrapper ব্যবহার করা হয়।

রেফারেন্স: [03:19]

বিস্তারিত: আমাদের মেইন Question ক্লাসে আইডি, টাইটেল, অপশন এবং সঠিক উত্তর থাকে। আমরা একটি নতুন ক্লাস তৈরি করি যার নাম QuestionWrapper। এখানে শুধু আইডি, টাইটেল এবং চারটি অপশন থাকবে, কিন্তু কোনো উত্তর (Right Answer) থাকবে না।

সহজ উদাহরণ: পরীক্ষার হলের প্রশ্নপত্রের মতো। প্রশ্নপত্রে প্রশ্ন থাকে কিন্তু উত্তর থাকে না। আমরা সার্ভার থেকে ইউজারকে শুধু এই 'প্রশ্নপত্র' (Wrapper) পাঠাব।


সার্ভিস লেয়ার এবং লজিক (Service Layer Logic)

এখানেই আসল কাজটা হয়—ডেটাবেস থেকে ডেটা আনা এবং সেটিকে র‍্যাপারে কনভার্ট করা।

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

কোড স্নিপেট:

Java

public ResponseEntity<List<QuestionWrapper>> getQuizQuestions(Integer id) {
    Optional<Quiz> quiz = quizDao.findById(id);
    List<Question> questionsFromDB = quiz.get().getQuestions();
    List<QuestionWrapper> questionsForUser = new ArrayList<>();

    for(Question q : questionsFromDB) {
        QuestionWrapper qw = new QuestionWrapper(q.getId(), q.getQuestionTitle(), q.getOption1(), q.getOption2(), q.getOption3(), q.getOption4());
        questionsForUser.add(qw);
    }

    return new ResponseEntity<>(questionsForUser, HttpStatus.OK);
} 

ব্যাখ্যা: ১. Optional: আইডি দিয়ে কুইজ খোঁজা হয়। যদি আইডি ভুল হয় তবে যেন অ্যাপ ক্র্যাশ না করে, তাই Optional ব্যবহার করা হয়েছে। ২. For Loop: ডেটাবেস থেকে আসা প্রতিটি আসল প্রশ্ন থেকে শুধু প্রয়োজনীয় অংশগুলো (আইডি, টাইটেল, অপশন) নিয়ে নতুন একটি QuestionWrapper লিস্টে রাখা হচ্ছে। ৩. শেষে এই নিরাপদ লিস্টটি ইউজারের কাছে পাঠিয়ে দেওয়া হচ্ছে।

কঠিন শব্দের সহজ ব্যাখ্যা:

  • DAO (Data Access Object): এটি এমন একটি টুল যা কোডকে ডেটাবেসের সাথে কথা বলতে সাহায্য করে।

  • Loop: কোনো কাজ বারবার করার পদ্ধতি। এখানে প্রতিটি প্রশ্নের জন্য একই কাজ বারবার করা হচ্ছে।


বিশ্লেষণ ও আমার মতামত (Analysis & Perception)

সৃষ্টিকর্তা যা বোঝাতে চেয়েছেন: ভিডিওর মূল উদ্দেশ্য ছিল মাইক্রোসার্ভিস আর্কিটেকচারে ডেটা সিকিউরিটি বজায় রাখা। সরাসরি ডেটাবেস মডেল ইউজারকে না পাঠিয়ে একটি 'র‍্যাপার' বা 'DTO' (Data Transfer Object) পাঠানো কেন জরুরি, তা এখানে স্পষ্টভাবে ফুটে উঠেছে।

বাস্তবতা ও সম্ভাবনা: বর্তমানে বড় বড় সব কুইজ বা এক্সাম অ্যাপ (যেমন: GRE, IELTS অনলাইন পোর্টাল) এই পদ্ধতি অনুসরণ করে। এতে হ্যাকাররা চাইলেও নেটওয়ার্ক ট্রাফিক থেকে উত্তর চুরি করতে পারে না।

উন্নত বিকল্প বা পরামর্শ:

  • Stream API: এখানে ডেটা কনভার্ট করার জন্য সাধারণ for loop এর বদলে জাভা ৮-এর Stream API ব্যবহার করলে কোড আরও ছোট এবং আধুনিক হতো।

  • Exception Handling: যদি ডেটাবেসে ওই আইডির কোনো কুইজ না থাকে, তবে সরাসরি get() ব্যবহার না করে একটি সুন্দর এরর মেসেজ দেখানো ভালো।

পরবর্তী পদক্ষেপ: এর পরের ধাপে ইউজার যখন উত্তর সাবমিট করবে, তখন কীভাবে সেই উত্তরগুলো সার্ভারে চেক করে রেজাল্ট বা স্কোর তৈরি করা যায়, তা নিয়ে কাজ করা উচিত।

[

Quiz App Using Spring Boot #7 | Microservices Tutorial

Telusko · 28K views

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

মন্তব্যসমূহ

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

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

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

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

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

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

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