কুইজ অ্যাপ্লিকেশন তৈরির এই পর্যায়ে আমরা শিখব কীভাবে একজন ইউজার বা ক্লায়েন্ট যখন তার উত্তরগুলো সাবমিট (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)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d