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;