Files
saqel/backend/migrations/20260909_learning_packages_and_remediation.sql
T

34 lines
3.3 KiB
SQL

CREATE TABLE IF NOT EXISTS `lesson_learning_packages` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `curriculum_lesson_id` BIGINT UNSIGNED NOT NULL, `bundle_id` BIGINT UNSIGNED NOT NULL,
`package_type` ENUM('general','english') NOT NULL DEFAULT 'general', `status` ENUM('draft','review','published','withdrawn') NOT NULL DEFAULT 'draft',
`structure_json` JSON NOT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`), UNIQUE KEY `uq_lesson_package` (`curriculum_lesson_id`,`bundle_id`,`package_type`),
CONSTRAINT `fk_learning_package_lesson` FOREIGN KEY (`curriculum_lesson_id`) REFERENCES `curriculum_lessons` (`id`) ON DELETE RESTRICT,
CONSTRAINT `fk_learning_package_bundle` FOREIGN KEY (`bundle_id`) REFERENCES `publication_bundles` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `english_lexical_entries` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `lesson_learning_package_id` BIGINT UNSIGNED NOT NULL,
`lemma` VARCHAR(255) NOT NULL, `part_of_speech` VARCHAR(64) NULL, `meaning_ar` TEXT NOT NULL,
`ipa_verified` VARCHAR(255) NULL, `audio_asset_id` BIGINT UNSIGNED NULL, `source_reference` VARCHAR(500) NOT NULL,
`review_status` ENUM('draft','approved','withdrawn') NOT NULL DEFAULT 'draft',
PRIMARY KEY (`id`), UNIQUE KEY `uq_english_lemma_package` (`lesson_learning_package_id`,`lemma`),
CONSTRAINT `fk_lexical_package` FOREIGN KEY (`lesson_learning_package_id`) REFERENCES `lesson_learning_packages` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_lexical_audio` FOREIGN KEY (`audio_asset_id`) REFERENCES `content_assets` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `learning_attempts` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `uuid` CHAR(36) NOT NULL, `student_id` BIGINT UNSIGNED NOT NULL,
`curriculum_lesson_id` BIGINT UNSIGNED NOT NULL, `activity_type` VARCHAR(64) NOT NULL, `activity_id` VARCHAR(128) NOT NULL,
`result_status` ENUM('correct','incorrect','partial','ungraded') NOT NULL, `help_level` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`submitted_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uq_learning_attempt_uuid` (`uuid`),
KEY `idx_attempt_student_lesson` (`student_id`,`curriculum_lesson_id`,`submitted_at`),
CONSTRAINT `fk_attempt_student` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE RESTRICT,
CONSTRAINT `fk_attempt_lesson` FOREIGN KEY (`curriculum_lesson_id`) REFERENCES `curriculum_lessons` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `remediation_plans` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `student_id` BIGINT UNSIGNED NOT NULL, `curriculum_lesson_id` BIGINT UNSIGNED NOT NULL,
`status` ENUM('active','completed','expired') NOT NULL DEFAULT 'active', `plan_json` JSON NOT NULL, `due_at` TIMESTAMP NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`), KEY `idx_remediation_student` (`student_id`,`status`),
CONSTRAINT `fk_remediation_student` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE RESTRICT,
CONSTRAINT `fk_remediation_lesson` FOREIGN KEY (`curriculum_lesson_id`) REFERENCES `curriculum_lessons` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;