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

স্প্রিং বুট ব্যবহার করে কুইজ অ্যাপের রেজাল্ট ক্যালকুলেশন

কুইজ অ্যাপ্লিকেশন তৈরির এই পর্যায়ে আমরা শিখব কীভাবে একজন ইউজার বা ক্লায়েন্ট যখন তার উত্তরগুলো সাবমিট (Submit) করবে, তখন সার্ভার সাইডে সেই উত্তরগুলো যাচাই করে স্কোর বা ফলাফল বের করতে হয়। এটি একটি কুইজ সিস্টেমের অন্যতম গুরুত্বপূর্ণ অংশ।

প্রজেক্ট রেফারেন্স

এই টিউটোরিয়ালটি Telusko চ্যানেলের "Quiz App Using Spring Boot #8 | Microservices Tutorial" ভিডিওর ওপর ভিত্তি করে তৈরি। ভিডিও লিঙ্ক


১. ইউজার রেসপন্স এবং ডেটা ফরম্যাট (User Response & Data Format)

প্রথমে আমাদের বুঝতে হবে ক্লায়েন্ট (যেমন: মোবাইল অ্যাপ বা ওয়েবসাইট) সার্ভারে কী পাঠাবে। ক্লায়েন্ট সাধারণত প্রতিটি প্রশ্নের ID এবং ইউজারের দেওয়া উত্তর (Response) পাঠায়।

সহজ ব্যাখ্যা:

  • Client: যে অ্যাপ ব্যবহার করছে।

  • JSON: এটি ডেটা আদান-প্রদান করার একটি সহজ ফরম্যাট। যেমন: { "id": 18, "response": "Java" }


২. রেসপন্স মডেল তৈরি (Creating Response Model)

ইউজারের পাঠানো ডেটা গ্রহণ করার জন্য জাভাতে একটি ক্লাস তৈরি করতে হবে। একে আমরা বলছি Response ক্লাস।

কোড স্নপেট:

Java

@Data
@RequiredArgsConstructor
public class Response {
    private Integer id;
    private String response;
} 

ব্যাখ্যা: এখানে @Data অ্যানোটেশন ব্যবহার করা হয়েছে যাতে আমাদের কষ্ট করে Getter/Setter লিখতে না হয়। এই ক্লাসে দুটি ফিল্ড আছে: প্রশ্নের আইডি (id) এবং ইউজারের দেওয়া উত্তর (response)।


৩. কন্ট্রোলার তৈরি (Controller Implementation)

সার্ভারে ডেটা পাঠানোর জন্য একটি এন্ডপয়েন্ট (Endpoint) দরকার। এখানে আমরা @PostMapping ব্যবহার করব।

কোড স্নপেট:

Java

@PostMapping("submit/{id}")
public ResponseEntity<Integer> submitQuiz(@PathVariable Integer id, @RequestBody List<Response> responses) {
    return quizService.calculateResult(id, responses);
} 

ব্যাখ্যা:

  • @PostMapping: যখন আমরা সার্ভারে কোনো ডেটা পাঠাই বা জমা দেই।

  • @PathVariable: ইউআরএল থেকে কুইজ আইডি নেওয়ার জন্য।

  • @RequestBody: ক্লায়েন্ট যে উত্তরগুলোর লিস্ট পাঠাচ্ছে তা ধরার জন্য।


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

আসল হিসাব-নিকাশ এখানেই হয়। ডাটাবেস থেকে সঠিক উত্তরগুলো এনে ইউজারের উত্তরের সাথে মেলানো হয়।

কঠিন শব্দ ও সহজ মানে:

  • Iterate (ইটারেট): একটি লিস্টের প্রতিটি আইটেম একে একে চেক করা। অনেকটা লাইনে দাঁড়িয়ে সবার রোল নাম্বার চেক করার মতো।

  • Database (ডাটাবেস): যেখানে সব তথ্য স্থায়ীভাবে জমা থাকে।

লজিক কোড:

Java

public ResponseEntity<Integer> calculateResult(Integer id, List<Response> responses) {
    Quiz quiz = quizDao.findById(id).get();
    List<Question> questions = quiz.getQuestions();
    int right = 0;
    int i = 0;
    for(Response response : responses) {
        if(response.getResponse().equals(questions.get(i).getRightAnswer()))
            right++;
        i++;
    }
    return new ResponseEntity<>(right, HttpStatus.OK);
} 

আমার ভাবনা: এখানে একটি লুপ চালানো হয়েছে। প্রতিবার দেখা হচ্ছে ইউজারের দেওয়া উত্তর এবং ডাটাবেসের RightAnswer এক কি না। যদি মিলে যায়, তবে right ভেরিয়েবল ১ করে বাড়ছে। শেষে এই right সংখ্যাটিই হলো ইউজারের স্কোর।


৫. এনালাইসিস এবং বাস্তবসম্মত ধারণা (Analysis & Real-world Perception)

সৃষ্টিকর্তার উদ্দেশ্য: ভিডিও নির্মাতা এখানে দেখিয়েছেন কীভাবে একটি মোনোলিথিক (Monolithic) অ্যাপ্লিকেশনে লজিক কাজ করে। মোনোলিথিক মানে হলো পুরো সফটওয়্যারটি একটি বড় প্রজেক্টের মধ্যে থাকা।

বাস্তবতা ও সম্ভাবনা: ১. নিরাপত্তা: ভিডিওতে সরাসরি উত্তর মেলানো হয়েছে। বাস্তবে অপশন নম্বর (A, B, C, D) ব্যবহার করা ভালো, তবে অপশন র‍্যান্ডমাইজ (Randomize) করলে আবার সমস্যা হতে পারে। ২. মাইক্রোসার্ভিস (Microservices): এটি একটি ছোট অংশ। ভবিষ্যতে যখন কুইজ সার্ভিস এবং কোয়েশ্চেন সার্ভিস আলাদা করা হবে, তখন এই লজিকটি আরও উন্নত হবে। ৩. বিকল্প পদ্ধতি: লুপ চালানোর সময় ইনডেক্স (i++) ব্যবহার না করে সরাসরি আইডি দিয়ে ম্যাপ (Map) ব্যবহার করলে পারফরম্যান্স আরও ভালো হতো, কারণ এতে উত্তরের ক্রম ভুল হওয়ার ভয় থাকে না।

পরামর্শ: আপনি যদি বিগিনার হন, তবে প্রথমে এই সাধারণ লজিকটি আয়ত্ত করুন। এরপর শিখুন কীভাবে ডাটাবেস কোয়েরি অপ্টিমাইজ করা যায় যাতে বড় কুইজের ক্ষেত্রেও অ্যাপটি দ্রুত কাজ করে। [13:31] এ যেমন বলা হয়েছে, এটি একটি মোনোলিথিক সিস্টেম, যা পরবর্তীতে মাইক্রোসার্ভিসে রূপান্তর করা শিখতে হবে।

[

Quiz App Using Spring Boot #8 | Microservices Tutorial

Telusko · 31K views

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

মন্তব্যসমূহ

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

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

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

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

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

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

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