Create a RESTful API feature for managing Student Exams with proper architecture using Service and Repository Pattern. dont make a migration 1️⃣ Database Models Create the following models and relationships: 📌 1. Questions Fields: id (bigint, primary key) school_id (int) class_id (int) subject_id (bigint) topic_id (bigint) question_type_id (bigint) question_story_id (bigint, nullable) → used if question is story-based question_bobot_id (bigint) question (text) discussion (text) point (int) order_number (int) status (enum: 'draft', 'approved', 'rejected') reject_message (text, nullable) created_at updated_at 📌 2. QuestionAnswers Fields: id (bigint) question_id (foreign key → Questions) description (text) order_number (int) is_true (boolean) created_at updated_at Relationship: One Question has many QuestionAnswers 📌 3. SubjectTopics Fields: id subject_id school_id title created_at updated_at 📌 4. ExamRoomTypes Fields: id school_id title type (enum: 'harian', 'uas') created_at updated_at 📌 5. ExamRooms Fields: id school_id source_type exam_room_type_id (foreign key → ExamRoomTypes) class_id exam_date (date) start_time (time) end_time (time) duration (integer, in minutes) subject_id subject_topic_id is_show_before_exam (boolean) is_random_question (boolean) is_random_option (boolean) is_automate_close_tab (boolean) is_show_score (boolean) is_show_result (boolean) is_show_discussion (boolean) total_max_student (integer) total_max_exam (integer) created_at updated_at Relationships: ExamRoom belongs to ExamRoomType, ExamRoom has many ExamStudents 📌 6. ExamStudents Fields: id school_id student_id subject_id subject_topic_id room_id (foreign key → ExamRooms) status (enum: 'Belum Ujian', 'Sedang Ujian', 'Selesai Ujian', 'Dikeluarkan') score (decimal, nullable) temp_score (decimal, nullable) is_publish (boolean) begin_at (datetime, nullable) finish_at (datetime, nullable) created_at updated_at Relationship: ExamStudent belongs to ExamRoom 2️⃣ API Features ✅ A. List Exam Students Create endpoint: GET /api/exam-students Support filtering by: From ExamRooms: exam_date, class_id, subject_id From ExamStudents: status, student_id, score, temp_score, is_publish, begin_at, finish_at Include pagination and sorting. ✅ B. Confirmation API Before Starting Exam Create endpoint: POST /api/exam-students/confirmation Response example: { "exam_name": "(from ExamRoomTypes.title)", "subject": "Subject Name", "day_exam": "Monday, 12 January 2026", "time_exam": "08:00 - 10:00", "name": "Student Name", "nisn": "12345678", "school": "School Name", "class": "Class Name" } This endpoint validates: Student eligibility, Exam schedule, Exam status, Exam quota. ✅ C. List Questions for Exam Create endpoint: GET /api/exam-rooms/{room_id}/questions Behavior: Show questions based on school_id, class_id, subject_id, topic_id. Apply random question (if enabled) and random option (if enabled). Do NOT expose correct answer. ✅ D. List Questions and Answers (Admin) GET /api/questions Filter by: school_id, class_id, subject_id, topic_id Include answers (with is_true visible for admin only). 3️⃣ Business Logic Requirements When creating ExamRoom: Create ExamRooms record, then bulk create multiple ExamStudents records, validate total_max_student, use database transaction. 4️⃣ Architecture Requirements Use Service Layer, use Repository Pattern, implement ExamStudentService, ExamRoomService, QuestionService, apply SOLID principles, use Request Validation, use Resource/DTO for API responses, use proper exception handling.