Pull request

Plain Text

Author: ahambridge

14 days ago 2,201 B


# Quiz Management – AJAX Question CRUD (PAIR PROGRAMMING EB+AH)

## Overview

This pull request introduces a fully interactive **Quiz Management** page for lecturers, allowing them to:

- View quiz metadata (Quiz Name, Subject, Created Date, Last Updated)
- View all questions in a structured Bootstrap table
- Add new questions via SweetAlert2 modal (AJAX)
- Edit existing questions via SweetAlert2 modal (AJAX)
- Delete questions via SweetAlert2 modal (AJAX)
- Automatically update `quiz.lastUpdated` via stored procedures

All database interactions have been refactored to use **stored procedures** to maintain consistency across the project.

---

## What’s Been Implemented

### Quiz Header Metadata
- Uses `GetQuizMetaByUUID`
- Displays:
  - Quiz name
  - Subject title
  - Creation date
  - Last updated date

### Question Table
- Uses `GetQuizQuestionsByID`
- Bootstrap styled
- Highlights correct answer (based on full-text match from `correctAnswer`)
- Displays difficulty points
- Scrollable container for better UX on large quizzes

### Add Question (AJAX + SweetAlert2)
- Uses `AddQuestion` procedure
- Validates:
  - All fields required
  - Correct answer must match one of A–D
  - Points must be ≥ 1
- Updates `quiz.lastUpdated`
- Reloads view after successful insert

### Edit Question (AJAX + SweetAlert2)
- Uses:
  - `GetQuestionByUUID`
  - `EditQuestion`
- Pre-fills modal with existing data
- Updates `quiz.lastUpdated`
- Maintains correct answer mapping logic

### Delete Question (AJAX + SweetAlert2)
- Confirmation dialog
- Uses `DeleteQuestion`
- Removes row dynamically on success
- Updates `quiz.lastUpdated`

---

## Database Changes

New stored procedures added:

- `AddQuestion`
- `EditQuestion`
- `DeleteQuestion`
- `GetQuestionByUUID`
- `GetQuizMetaByUUID`

All procedures:
- Use UUIDs
- Return affected rows / new UUID where appropriate
- Keep logic consistent across operations

---

## Testing Notes

Tested:
- Add question
- Edit question
- Delete question
- Metadata updates (`lastUpdated`)

---

Please can you review the code as is, any suggestions will be appreciated.