diff --git a/drizzle/0000_aberrant_deathstrike.sql b/drizzle/0000_aberrant_deathstrike.sql new file mode 100644 index 0000000..d6cc618 --- /dev/null +++ b/drizzle/0000_aberrant_deathstrike.sql @@ -0,0 +1,1560 @@ +CREATE TABLE `academic_years` ( + `id` varchar(128) NOT NULL, + `name` varchar(100) NOT NULL, + `start_date` timestamp NOT NULL, + `end_date` timestamp NOT NULL, + `is_active` boolean NOT NULL DEFAULT false, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `academic_years_id` PRIMARY KEY(`id`), + CONSTRAINT `academic_years_name_unique` UNIQUE(`name`) +); +--> statement-breakpoint +CREATE TABLE `accounts` ( + `userId` varchar(128) NOT NULL, + `type` varchar(255) NOT NULL, + `provider` varchar(255) NOT NULL, + `providerAccountId` varchar(255) NOT NULL, + `refresh_token` text, + `access_token` text, + `expires_at` int, + `token_type` varchar(255), + `scope` varchar(255), + `id_token` text, + `session_state` varchar(255), + CONSTRAINT `accounts_provider_providerAccountId_pk` PRIMARY KEY(`provider`,`providerAccountId`) +); +--> statement-breakpoint +CREATE TABLE `ai_providers` ( + `id` varchar(128) NOT NULL, + `provider` enum('zhipu','openai','gemini','custom','ollama') NOT NULL, + `base_url` varchar(512), + `model` varchar(128) NOT NULL, + `api_key_encrypted` text NOT NULL, + `api_key_last4` varchar(4), + `is_default` boolean NOT NULL DEFAULT false, + `visibility` enum('public','private') NOT NULL DEFAULT 'private', + `created_by` varchar(128), + `updated_by` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `ai_providers_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `announcement_reads` ( + `id` varchar(128) NOT NULL, + `announcement_id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `read_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `announcement_reads_id` PRIMARY KEY(`id`), + CONSTRAINT `announcement_reads_unique_idx` UNIQUE(`announcement_id`,`user_id`) +); +--> statement-breakpoint +CREATE TABLE `announcements` ( + `id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `content` text NOT NULL, + `type` enum('school','grade','class') NOT NULL DEFAULT 'school', + `status` enum('draft','published','archived') NOT NULL DEFAULT 'draft', + `target_grade_id` varchar(128), + `target_class_id` varchar(128), + `author_id` varchar(128) NOT NULL, + `published_at` datetime, + `is_pinned` boolean NOT NULL DEFAULT false, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `announcements_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `attendance_records` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `schedule_id` varchar(128), + `date` date NOT NULL, + `status` enum('present','absent','late','early_leave','excused','school_activity') NOT NULL, + `period` enum('morning_reading','morning','afternoon','evening','full_day'), + `remark` text, + `reason` varchar(255), + `recorded_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `attendance_records_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `attendance_rules` ( + `id` varchar(128) NOT NULL, + `class_id` varchar(128), + `late_threshold_minutes` int DEFAULT 15, + `early_leave_threshold_minutes` int DEFAULT 15, + `enable_auto_mark` boolean DEFAULT false, + `attendance_rate_threshold` int DEFAULT 90, + `consecutive_absence_threshold` int DEFAULT 3, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `attendance_rules_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `audit_logs` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `user_name` varchar(255) NOT NULL, + `action` varchar(255) NOT NULL, + `module` varchar(128) NOT NULL, + `target_id` varchar(128), + `target_type` varchar(128), + `detail` text, + `ip_address` varchar(45), + `user_agent` varchar(512), + `status` enum('success','failure') NOT NULL DEFAULT 'success', + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `audit_logs_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `chapters` ( + `id` varchar(128) NOT NULL, + `textbook_id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `order` int DEFAULT 0, + `parent_id` varchar(128), + `content` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `chapters_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `class_enrollments` ( + `class_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `class_enrollment_status` enum('active','inactive') NOT NULL DEFAULT 'active', + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `class_enrollments_class_id_student_id_pk` PRIMARY KEY(`class_id`,`student_id`) +); +--> statement-breakpoint +CREATE TABLE `class_invitation_codes` ( + `id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `code` varchar(8) NOT NULL, + `class_invitation_code_status` enum('active','disabled','expired','exhausted') NOT NULL DEFAULT 'active', + `max_uses` int, + `used_count` int NOT NULL DEFAULT 0, + `expires_at` timestamp, + `created_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + `revoked_at` timestamp, + `revoked_by` varchar(128), + `note` varchar(255), + CONSTRAINT `class_invitation_codes_id` PRIMARY KEY(`id`), + CONSTRAINT `class_invitation_codes_code_unique` UNIQUE(`code`), + CONSTRAINT `class_invitation_codes_code_idx` UNIQUE(`code`) +); +--> statement-breakpoint +CREATE TABLE `class_schedule` ( + `id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `weekday` int NOT NULL, + `start_time` varchar(5) NOT NULL, + `end_time` varchar(5) NOT NULL, + `course` varchar(255) NOT NULL, + `location` varchar(100), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `class_schedule_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `class_subject_teachers` ( + `class_id` varchar(128) NOT NULL, + `subject_id` varchar(128) NOT NULL, + `teacher_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `class_subject_teachers_class_id_subject_id_pk` PRIMARY KEY(`class_id`,`subject_id`) +); +--> statement-breakpoint +CREATE TABLE `classes` ( + `id` varchar(128) NOT NULL, + `school_name` varchar(255), + `school_id` varchar(128), + `name` varchar(255) NOT NULL, + `grade` varchar(50) NOT NULL, + `grade_id` varchar(128), + `homeroom` varchar(50), + `room` varchar(50), + `invitation_code` varchar(6), + `teacher_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `classes_id` PRIMARY KEY(`id`), + CONSTRAINT `classes_invitation_code_unique` UNIQUE(`invitation_code`) +); +--> statement-breakpoint +CREATE TABLE `classrooms` ( + `id` varchar(128) NOT NULL, + `name` varchar(255) NOT NULL, + `building` varchar(100), + `floor` int, + `capacity` int, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `classrooms_id` PRIMARY KEY(`id`), + CONSTRAINT `classrooms_name_unique` UNIQUE(`name`) +); +--> statement-breakpoint +CREATE TABLE `course_plan_items` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `week` int NOT NULL, + `topic` varchar(255) NOT NULL, + `content` text, + `hours` int NOT NULL DEFAULT 2, + `textbook_chapter` varchar(255), + `notes` text, + `is_completed` boolean NOT NULL DEFAULT false, + `completed_at` date, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `course_plan_items_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `course_plans` ( + `id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `subject_id` varchar(128) NOT NULL, + `teacher_id` varchar(128) NOT NULL, + `academic_year_id` varchar(128), + `semester` enum('1','2') NOT NULL DEFAULT '1', + `total_hours` int NOT NULL DEFAULT 0, + `completed_hours` int NOT NULL DEFAULT 0, + `weekly_hours` int NOT NULL DEFAULT 0, + `start_date` date, + `end_date` date, + `syllabus` text, + `objectives` text, + `status` enum('planning','active','completed','paused') NOT NULL DEFAULT 'planning', + `created_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `course_plans_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `course_selections` ( + `id` varchar(128) NOT NULL, + `course_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `selection_status` enum('selected','enrolled','waitlist','dropped','rejected') NOT NULL DEFAULT 'selected', + `priority` int DEFAULT 1, + `selected_at` timestamp NOT NULL DEFAULT (now()), + `enrolled_at` timestamp, + `dropped_at` timestamp, + `drop_reason` varchar(255), + `lottery_rank` int, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `course_selections_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `data_change_logs` ( + `id` varchar(128) NOT NULL, + `table_name` varchar(128) NOT NULL, + `record_id` varchar(128) NOT NULL, + `action` enum('create','update','delete') NOT NULL, + `old_value` text, + `new_value` text, + `changed_by` varchar(128) NOT NULL, + `changed_by_name` varchar(255) NOT NULL, + `ip_address` varchar(45), + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `data_change_logs_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `departments` ( + `id` varchar(128) NOT NULL, + `name` varchar(255) NOT NULL, + `description` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `departments_id` PRIMARY KEY(`id`), + CONSTRAINT `departments_name_unique` UNIQUE(`name`) +); +--> statement-breakpoint +CREATE TABLE `elective_courses` ( + `id` varchar(128) NOT NULL, + `name` varchar(255) NOT NULL, + `subject_id` varchar(128), + `teacher_id` varchar(128) NOT NULL, + `grade_id` varchar(128), + `description` text, + `capacity` int NOT NULL DEFAULT 30, + `enrolled_count` int NOT NULL DEFAULT 0, + `classroom` varchar(100), + `schedule` varchar(255), + `start_date` date, + `end_date` date, + `selection_start_at` datetime, + `selection_end_at` datetime, + `drop_deadline` datetime, + `status` enum('draft','open','closed','cancelled') NOT NULL DEFAULT 'draft', + `selection_mode` enum('fcfs','lottery') NOT NULL DEFAULT 'fcfs', + `credit` decimal(3,1) DEFAULT '1.0', + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `elective_courses_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `error_book_items` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `source_type` enum('exam','homework','manual') NOT NULL DEFAULT 'manual', + `source_id` varchar(128), + `student_answer` json, + `correct_answer` json, + `subject_id` varchar(128), + `knowledge_point_ids` json, + `error_status` enum('new','learning','mastered','archived') NOT NULL DEFAULT 'new', + `mastery_level` int NOT NULL DEFAULT 0, + `next_review_at` timestamp, + `review_interval` int NOT NULL DEFAULT 1, + `review_count` int NOT NULL DEFAULT 0, + `correct_streak` int NOT NULL DEFAULT 0, + `note` text, + `error_tags` json, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `error_book_items_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `error_book_reviews` ( + `id` varchar(128) NOT NULL, + `item_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `review_result` enum('again','hard','good','easy') NOT NULL, + `reviewed_at` timestamp NOT NULL DEFAULT (now()), + `new_interval` int, + `new_mastery_level` int, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `error_book_reviews_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `exam_proctoring_events` ( + `id` varchar(128) NOT NULL, + `submission_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `exam_id` varchar(128) NOT NULL, + `event_type` enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout') NOT NULL, + `event_detail` text, + `occurred_at` timestamp NOT NULL DEFAULT (now()), + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `exam_proctoring_events_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `exam_questions` ( + `exam_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `score` int DEFAULT 0, + `order` int DEFAULT 0, + CONSTRAINT `exam_questions_exam_id_question_id_pk` PRIMARY KEY(`exam_id`,`question_id`) +); +--> statement-breakpoint +CREATE TABLE `exam_submissions` ( + `id` varchar(128) NOT NULL, + `exam_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `score` int, + `status` varchar(50) DEFAULT 'started', + `submitted_at` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `exam_submissions_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `exams` ( + `id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `description` text, + `structure` json, + `creator_id` varchar(128) NOT NULL, + `subject_id` varchar(128), + `grade_id` varchar(128), + `start_time` timestamp, + `end_time` timestamp, + `exam_mode` enum('homework','timed','proctored') DEFAULT 'homework', + `duration_minutes` int, + `shuffle_questions` boolean DEFAULT false, + `allow_late_start` boolean DEFAULT false, + `late_start_grace_minutes` int DEFAULT 0, + `anti_cheat_enabled` boolean DEFAULT false, + `status` varchar(50) DEFAULT 'draft', + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `exams_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `file_attachments` ( + `id` varchar(128) NOT NULL, + `filename` varchar(255) NOT NULL, + `original_name` varchar(255) NOT NULL, + `mime_type` varchar(128) NOT NULL, + `size` bigint NOT NULL, + `storage_path` varchar(512) NOT NULL, + `url` varchar(512), + `uploader_id` varchar(128) NOT NULL, + `target_type` varchar(128), + `target_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `file_attachments_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `grade_appeals` ( + `id` varchar(128) NOT NULL, + `grade_record_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `original_score` decimal(6,2) NOT NULL, + `expected_score` decimal(6,2), + `reason` text NOT NULL, + `appeal_status` enum('pending','approved','rejected','withdrawn') NOT NULL DEFAULT 'pending', + `reviewer_id` varchar(128), + `review_comment` text, + `adjusted_score` decimal(6,2), + `reviewed_at` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `grade_appeals_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `grade_drafts` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `subject_id` varchar(128) NOT NULL, + `type` varchar(20) NOT NULL, + `content` json NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + `locked_by` varchar(128), + `locked_at` timestamp, + `lock_token` varchar(64), + CONSTRAINT `grade_drafts_id` PRIMARY KEY(`id`), + CONSTRAINT `gd_user_class_subject_type_idx` UNIQUE(`user_id`,`class_id`,`subject_id`,`type`) +); +--> statement-breakpoint +CREATE TABLE `grade_record_answers` ( + `id` varchar(128) NOT NULL, + `grade_record_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `score` decimal(6,2) NOT NULL, + `full_score` decimal(6,2) NOT NULL, + `feedback` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `grade_record_answers_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `grade_records` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `subject_id` varchar(128) NOT NULL, + `exam_id` varchar(128), + `academic_year_id` varchar(128), + `title` varchar(255) NOT NULL, + `score` decimal(6,2) NOT NULL, + `full_score` decimal(6,2) NOT NULL DEFAULT '100', + `type` enum('exam','quiz','homework','other') NOT NULL DEFAULT 'exam', + `semester` enum('1','2') NOT NULL DEFAULT '1', + `recorded_by` varchar(128) NOT NULL, + `remark` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `grade_records_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `grades` ( + `id` varchar(128) NOT NULL, + `school_id` varchar(128) NOT NULL, + `name` varchar(100) NOT NULL, + `order` int NOT NULL DEFAULT 0, + `grade_head_id` varchar(128), + `teaching_head_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `grades_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `homework_answers` ( + `id` varchar(128) NOT NULL, + `submission_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `answer_content` json, + `score` int, + `feedback` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `homework_answers_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `homework_assignment_questions` ( + `assignment_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `score` int DEFAULT 0, + `order` int DEFAULT 0, + CONSTRAINT `homework_assignment_questions_assignment_id_question_id_pk` PRIMARY KEY(`assignment_id`,`question_id`) +); +--> statement-breakpoint +CREATE TABLE `homework_assignment_targets` ( + `assignment_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `homework_assignment_targets_assignment_id_student_id_pk` PRIMARY KEY(`assignment_id`,`student_id`) +); +--> statement-breakpoint +CREATE TABLE `homework_assignments` ( + `id` varchar(128) NOT NULL, + `source_exam_id` varchar(128), + `title` varchar(255) NOT NULL, + `description` text, + `structure` json, + `status` varchar(50) DEFAULT 'draft', + `creator_id` varchar(128) NOT NULL, + `available_at` timestamp, + `due_at` timestamp, + `allow_late` boolean NOT NULL DEFAULT false, + `late_due_at` timestamp, + `max_attempts` int NOT NULL DEFAULT 1, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `homework_assignments_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `homework_submissions` ( + `id` varchar(128) NOT NULL, + `assignment_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `attempt_no` int NOT NULL DEFAULT 1, + `score` int, + `status` varchar(50) DEFAULT 'started', + `started_at` timestamp NOT NULL DEFAULT (now()), + `submitted_at` timestamp, + `is_late` boolean NOT NULL DEFAULT false, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `homework_submissions_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `invitation_codes` ( + `id` varchar(128) NOT NULL, + `code` varchar(64) NOT NULL, + `email` varchar(255), + `role` varchar(50) NOT NULL, + `class_id` varchar(128), + `notes` varchar(500), + `created_at` timestamp NOT NULL DEFAULT (now()), + `created_by` varchar(128), + `expires_at` timestamp, + `used_by` varchar(128), + `used_at` timestamp, + CONSTRAINT `invitation_codes_id` PRIMARY KEY(`id`), + CONSTRAINT `invitation_codes_code_unique` UNIQUE(`code`) +); +--> statement-breakpoint +CREATE TABLE `knowledge_point_mastery` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `knowledge_point_id` varchar(128) NOT NULL, + `mastery_level` decimal(5,2) NOT NULL DEFAULT '0', + `total_questions` int NOT NULL DEFAULT 0, + `correct_questions` int NOT NULL DEFAULT 0, + `last_assessed_at` timestamp NOT NULL DEFAULT (now()), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `knowledge_point_mastery_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `knowledge_point_prerequisites` ( + `knowledge_point_id` varchar(128) NOT NULL, + `prerequisite_kp_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `kp_prereq_pk` PRIMARY KEY(`knowledge_point_id`,`prerequisite_kp_id`) +); +--> statement-breakpoint +CREATE TABLE `knowledge_points` ( + `id` varchar(128) NOT NULL, + `name` varchar(255) NOT NULL, + `description` text, + `anchor_text` varchar(255), + `parent_id` varchar(128), + `chapter_id` varchar(128), + `level` int DEFAULT 0, + `order` int DEFAULT 0, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `knowledge_points_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `learning_diagnostic_reports` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128), + `generated_by` varchar(128), + `class_id` varchar(128), + `grade_id` varchar(128), + `report_type` enum('individual','class','grade') NOT NULL DEFAULT 'individual', + `period` varchar(50), + `summary` text, + `strengths` json, + `weaknesses` json, + `recommendations` json, + `overall_score` decimal(5,2), + `report_status` enum('draft','published','archived') NOT NULL DEFAULT 'draft', + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `learning_diagnostic_reports_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `leave_requests` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `requester_id` varchar(128) NOT NULL, + `class_id` varchar(128) NOT NULL, + `leave_type` enum('sick','personal','family','other') NOT NULL, + `start_date` date NOT NULL, + `end_date` date NOT NULL, + `reason` text NOT NULL, + `leave_status` enum('pending','approved','rejected','cancelled') NOT NULL DEFAULT 'pending', + `reviewer_id` varchar(128), + `review_comment` text, + `reviewed_at` timestamp, + `attendance_synced` boolean NOT NULL DEFAULT false, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `leave_requests_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_ai_evaluations` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `version_no` int NOT NULL, + `overall_score` int, + `dimension_scores` json, + `suggestions` text, + `recommended_standard_ids` json, + `evaluated_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_ai_evaluations_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_analytics_daily` ( + `id` varchar(128) NOT NULL, + `snapshot_date` date NOT NULL, + `teacher_id` varchar(128) NOT NULL, + `subject_id` varchar(128), + `grade_id` varchar(128), + `new_plans_count` int NOT NULL DEFAULT 0, + `edit_duration_min` int NOT NULL DEFAULT 0, + `saved_versions_count` int NOT NULL DEFAULT 0, + `submitted_count` int NOT NULL DEFAULT 0, + `published_count` int NOT NULL DEFAULT 0, + `standards_linked` int NOT NULL DEFAULT 0, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_analytics_daily_id` PRIMARY KEY(`id`), + CONSTRAINT `lpad_date_teacher_idx` UNIQUE(`snapshot_date`,`teacher_id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_attachments` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `block_id` varchar(128), + `file_id` varchar(128) NOT NULL, + `display_name` varchar(255) NOT NULL, + `attachment_type` varchar(50) NOT NULL DEFAULT 'reference', + `uploaded_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_attachments_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_comments` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `block_id` varchar(128) NOT NULL, + `content` text NOT NULL, + `author_id` varchar(128) NOT NULL, + `resolved` boolean NOT NULL DEFAULT false, + `parent_comment_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `lesson_plan_comments_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_formative_items` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `block_id` varchar(128) NOT NULL, + `interaction_type` varchar(20) NOT NULL, + `payload` json NOT NULL, + `instant_feedback` boolean NOT NULL DEFAULT false, + `order_index` int NOT NULL DEFAULT 0, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `lesson_plan_formative_items_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_formative_responses` ( + `id` varchar(128) NOT NULL, + `item_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `class_id` varchar(128), + `response` json NOT NULL, + `is_correct` boolean, + `duration_sec` int, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_formative_responses_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_review_records` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `reviewer_id` varchar(128) NOT NULL, + `decision` varchar(20) NOT NULL, + `comment` text, + `previous_status` varchar(50) NOT NULL, + `new_status` varchar(50) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_review_records_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_standards` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `standard_id` varchar(128) NOT NULL, + `relation_type` varchar(20) NOT NULL DEFAULT 'primary', + `created_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_standards_id` PRIMARY KEY(`id`), + CONSTRAINT `lps_plan_standard_idx` UNIQUE(`plan_id`,`standard_id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_substitutes` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `original_teacher_id` varchar(128) NOT NULL, + `substitute_teacher_id` varchar(128) NOT NULL, + `start_date` date NOT NULL, + `end_date` date, + `reason` varchar(255), + `status` varchar(20) NOT NULL DEFAULT 'active', + `created_by` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `lesson_plan_substitutes_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_templates` ( + `id` varchar(128) NOT NULL, + `name` varchar(100) NOT NULL, + `type` varchar(50) NOT NULL, + `scope` varchar(50) NOT NULL, + `blocks` json NOT NULL, + `creator_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `lesson_plan_templates_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plan_versions` ( + `id` varchar(128) NOT NULL, + `plan_id` varchar(128) NOT NULL, + `version_no` int NOT NULL, + `label` varchar(100), + `content` json NOT NULL, + `is_auto` boolean NOT NULL DEFAULT false, + `creator_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `lesson_plan_versions_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `lesson_plans` ( + `id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `textbook_id` varchar(128), + `chapter_id` varchar(128), + `course_plan_item_id` varchar(128), + `subject_id` varchar(128), + `grade_id` varchar(128), + `template_id` varchar(128), + `template_name` varchar(100), + `content` json NOT NULL, + `status` varchar(50) NOT NULL DEFAULT 'draft', + `creator_id` varchar(128) NOT NULL, + `last_saved_at` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `lesson_plans_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `login_logs` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128), + `user_email` varchar(255) NOT NULL, + `action` enum('signin','signout','signup') NOT NULL, + `status` enum('success','failure') NOT NULL DEFAULT 'success', + `ip_address` varchar(45), + `user_agent` varchar(512), + `error_message` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `login_logs_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `message_drafts` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `receiver_id` varchar(128), + `subject` varchar(255), + `content` text, + `parent_message_id` varchar(128), + `device_id` varchar(128), + `version` int NOT NULL DEFAULT 1, + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `message_drafts_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `message_notifications` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `type` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `content` text, + `link` varchar(512), + `is_read` boolean NOT NULL DEFAULT false, + `priority` varchar(16) NOT NULL DEFAULT 'normal', + `is_archived` boolean NOT NULL DEFAULT false, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `message_notifications_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `message_reports` ( + `id` varchar(128) NOT NULL, + `reporter_id` varchar(128) NOT NULL, + `message_id` varchar(128) NOT NULL, + `reported_user_id` varchar(128) NOT NULL, + `reason` varchar(50) NOT NULL, + `description` text, + `status` varchar(20) NOT NULL DEFAULT 'pending', + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `message_reports_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `message_templates` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `title` varchar(100) NOT NULL, + `content` text NOT NULL, + `sort_order` int NOT NULL DEFAULT 0, + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `message_templates_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `messages` ( + `id` varchar(128) NOT NULL, + `sender_id` varchar(128) NOT NULL, + `receiver_id` varchar(128) NOT NULL, + `subject` varchar(255), + `content` text NOT NULL, + `is_read` boolean NOT NULL DEFAULT false, + `read_at` timestamp, + `parent_message_id` varchar(128), + `sender_deleted_at` timestamp, + `receiver_deleted_at` timestamp, + `is_starred` boolean NOT NULL DEFAULT false, + `recalled_at` timestamp, + `group_message_id` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `messages_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `notification_logs` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `channel` varchar(32) NOT NULL, + `status` varchar(16) NOT NULL, + `message_id` varchar(255), + `error` text, + `sent_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `notification_logs_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `notification_preferences` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `email_enabled` boolean NOT NULL DEFAULT false, + `sms_enabled` boolean NOT NULL DEFAULT false, + `push_enabled` boolean NOT NULL DEFAULT true, + `homework_notifications` boolean NOT NULL DEFAULT true, + `grade_notifications` boolean NOT NULL DEFAULT true, + `announcement_notifications` boolean NOT NULL DEFAULT true, + `message_notifications` boolean NOT NULL DEFAULT true, + `attendance_notifications` boolean NOT NULL DEFAULT true, + `quiet_hours_enabled` boolean NOT NULL DEFAULT false, + `quiet_hours_start` varchar(5), + `quiet_hours_end` varchar(5), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `notification_preferences_id` PRIMARY KEY(`id`), + CONSTRAINT `notification_preferences_user_id_unique` UNIQUE(`user_id`) +); +--> statement-breakpoint +CREATE TABLE `parent_student_relations` ( + `id` varchar(128) NOT NULL, + `parent_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `relation` varchar(50), + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `parent_student_relations_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `password_security` ( + `id` varchar(128) NOT NULL, + `user_id` varchar(128) NOT NULL, + `failed_login_attempts` int NOT NULL DEFAULT 0, + `locked_until` timestamp, + `password_changed_at` timestamp NOT NULL DEFAULT (now()), + `must_change_password` boolean NOT NULL DEFAULT false, + `last_password_change` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `password_security_id` PRIMARY KEY(`id`), + CONSTRAINT `password_security_user_id_unique` UNIQUE(`user_id`) +); +--> statement-breakpoint +CREATE TABLE `practice_answers` ( + `id` varchar(128) NOT NULL, + `session_id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `variant_content` json, + `is_variant` boolean NOT NULL DEFAULT false, + `order_index` int NOT NULL, + `practice_answer_status` enum('pending','answered','skipped') NOT NULL DEFAULT 'pending', + `student_answer` json, + `is_correct` boolean, + `score` int, + `max_score` int NOT NULL DEFAULT 1, + `answered_at` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `practice_answers_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `practice_sessions` ( + `id` varchar(128) NOT NULL, + `student_id` varchar(128) NOT NULL, + `subject_id` varchar(128), + `practice_type` enum('error_variant','knowledge_point','weak_chapter','ai_recommended') NOT NULL, + `source_meta` json, + `practice_status` enum('in_progress','completed','abandoned') NOT NULL DEFAULT 'in_progress', + `total_questions` int NOT NULL DEFAULT 0, + `answered_questions` int NOT NULL DEFAULT 0, + `correct_count` int NOT NULL DEFAULT 0, + `started_at` timestamp NOT NULL DEFAULT (now()), + `completed_at` timestamp, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `practice_sessions_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `questions` ( + `id` varchar(128) NOT NULL, + `content` json NOT NULL, + `type` enum('single_choice','multiple_choice','text','judgment','composite') NOT NULL, + `difficulty` int DEFAULT 1, + `parent_id` varchar(128), + `author_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `questions_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `questions_to_knowledge_points` ( + `question_id` varchar(128) NOT NULL, + `knowledge_point_id` varchar(128) NOT NULL, + CONSTRAINT `questions_to_knowledge_points_question_id_knowledge_point_id_pk` PRIMARY KEY(`question_id`,`knowledge_point_id`) +); +--> statement-breakpoint +CREATE TABLE `role_permissions` ( + `role_id` varchar(128) NOT NULL, + `permission` varchar(100) NOT NULL, + CONSTRAINT `role_permissions_role_id_permission_pk` PRIMARY KEY(`role_id`,`permission`) +); +--> statement-breakpoint +CREATE TABLE `roles` ( + `id` varchar(128) NOT NULL, + `name` varchar(50) NOT NULL, + `description` varchar(255), + `is_system` boolean NOT NULL DEFAULT false, + `is_enabled` boolean NOT NULL DEFAULT true, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `roles_id` PRIMARY KEY(`id`), + CONSTRAINT `roles_name_unique` UNIQUE(`name`) +); +--> statement-breakpoint +CREATE TABLE `schedule_changes` ( + `id` varchar(128) NOT NULL, + `original_schedule_id` varchar(128), + `class_id` varchar(128) NOT NULL, + `original_teacher_id` varchar(128), + `substitute_teacher_id` varchar(128), + `original_date` date, + `new_date` date, + `new_start_time` varchar(10), + `new_end_time` varchar(10), + `reason` text, + `status` enum('pending','approved','rejected','completed') NOT NULL DEFAULT 'pending', + `requested_by` varchar(128) NOT NULL, + `approved_by` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `schedule_changes_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `scheduling_rules` ( + `id` varchar(128) NOT NULL, + `class_id` varchar(128), + `max_daily_hours` int DEFAULT 8, + `max_continuous_hours` int DEFAULT 2, + `lunch_break_start` varchar(10) DEFAULT '12:00', + `lunch_break_end` varchar(10) DEFAULT '13:00', + `morning_start` varchar(10) DEFAULT '08:00', + `afternoon_end` varchar(10) DEFAULT '17:00', + `avoid_back_to_back` boolean DEFAULT false, + `balanced_subjects` boolean DEFAULT true, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `scheduling_rules_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `schools` ( + `id` varchar(128) NOT NULL, + `name` varchar(255) NOT NULL, + `code` varchar(50), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `schools_id` PRIMARY KEY(`id`), + CONSTRAINT `schools_name_unique` UNIQUE(`name`), + CONSTRAINT `schools_code_unique` UNIQUE(`code`) +); +--> statement-breakpoint +CREATE TABLE `sessions` ( + `sessionToken` varchar(255) NOT NULL, + `userId` varchar(128) NOT NULL, + `expires` timestamp NOT NULL, + CONSTRAINT `sessions_sessionToken` PRIMARY KEY(`sessionToken`) +); +--> statement-breakpoint +CREATE TABLE `standards` ( + `id` varchar(128) NOT NULL, + `code` varchar(100) NOT NULL, + `title` varchar(255) NOT NULL, + `description` text, + `level` varchar(20) NOT NULL, + `parent_id` varchar(128), + `subject_id` varchar(128), + `grade_id` varchar(128), + `stage` varchar(20), + `sort_order` int NOT NULL DEFAULT 0, + `is_active` boolean NOT NULL DEFAULT true, + `created_by` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `standards_id` PRIMARY KEY(`id`), + CONSTRAINT `std_code_idx` UNIQUE(`code`) +); +--> statement-breakpoint +CREATE TABLE `subjects` ( + `id` varchar(128) NOT NULL, + `name` varchar(100) NOT NULL, + `code` varchar(50), + `order` int DEFAULT 0, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `subjects_id` PRIMARY KEY(`id`), + CONSTRAINT `subjects_name_unique` UNIQUE(`name`), + CONSTRAINT `subjects_code_unique` UNIQUE(`code`) +); +--> statement-breakpoint +CREATE TABLE `submission_answers` ( + `id` varchar(128) NOT NULL, + `submission_id` varchar(128) NOT NULL, + `question_id` varchar(128) NOT NULL, + `answer_content` json, + `score` int, + `feedback` text, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `submission_answers_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `system_settings` ( + `id` varchar(128) NOT NULL, + `category` varchar(50) NOT NULL, + `key` varchar(100) NOT NULL, + `value` text NOT NULL, + `value_type` varchar(20) NOT NULL DEFAULT 'string', + `updated_by` varchar(128), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `system_settings_id` PRIMARY KEY(`id`), + CONSTRAINT `ss_category_key_idx` UNIQUE(`category`,`key`) +); +--> statement-breakpoint +CREATE TABLE `textbooks` ( + `id` varchar(128) NOT NULL, + `title` varchar(255) NOT NULL, + `subject` varchar(100) NOT NULL, + `grade` varchar(50), + `publisher` varchar(100), + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `textbooks_id` PRIMARY KEY(`id`) +); +--> statement-breakpoint +CREATE TABLE `user_blocks` ( + `id` varchar(128) NOT NULL, + `blocker_id` varchar(128) NOT NULL, + `blocked_id` varchar(128) NOT NULL, + `created_at` timestamp NOT NULL DEFAULT (now()), + CONSTRAINT `user_blocks_id` PRIMARY KEY(`id`), + CONSTRAINT `user_blocks_blocker_blocked_uniq` UNIQUE(`blocker_id`,`blocked_id`) +); +--> statement-breakpoint +CREATE TABLE `users` ( + `id` varchar(128) NOT NULL, + `name` varchar(255), + `email` varchar(255) NOT NULL, + `emailVerified` timestamp, + `image` varchar(255), + `password` varchar(255), + `phone` varchar(30), + `address` varchar(255), + `gender` varchar(20), + `age` int, + `grade_id` varchar(128), + `department_id` varchar(128), + `onboarded_at` timestamp, + `birth_date` date, + `guardian_name` varchar(255), + `guardian_phone` varchar(20), + `guardian_relation` varchar(50), + `consent_accepted_at` datetime, + `created_at` timestamp NOT NULL DEFAULT (now()), + `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `users_id` PRIMARY KEY(`id`), + CONSTRAINT `users_email_unique` UNIQUE(`email`) +); +--> statement-breakpoint +CREATE TABLE `users_to_roles` ( + `user_id` varchar(128) NOT NULL, + `role_id` varchar(128) NOT NULL, + CONSTRAINT `users_to_roles_user_id_role_id_pk` PRIMARY KEY(`user_id`,`role_id`) +); +--> statement-breakpoint +CREATE TABLE `verificationTokens` ( + `identifier` varchar(255) NOT NULL, + `token` varchar(255) NOT NULL, + `expires` timestamp NOT NULL, + CONSTRAINT `verificationTokens_identifier_token_pk` PRIMARY KEY(`identifier`,`token`) +); +--> statement-breakpoint +ALTER TABLE `accounts` ADD CONSTRAINT `accounts_userId_users_id_fk` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `announcement_reads` ADD CONSTRAINT `announcement_reads_announcement_id_announcements_id_fk` FOREIGN KEY (`announcement_id`) REFERENCES `announcements`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `announcement_reads` ADD CONSTRAINT `announcement_reads_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `announcements` ADD CONSTRAINT `announcements_author_id_users_id_fk` FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_recorded_by_users_id_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_rb_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_rules` ADD CONSTRAINT `attendance_rules_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `attendance_rules` ADD CONSTRAINT `atr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `chapters` ADD CONSTRAINT `chapters_textbook_id_textbooks_id_fk` FOREIGN KEY (`textbook_id`) REFERENCES `textbooks`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_enrollments` ADD CONSTRAINT `ce_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_enrollments` ADD CONSTRAINT `ce_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `cic_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_schedule` ADD CONSTRAINT `cs_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `class_subject_teachers_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `cst_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `cst_s_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `classes` ADD CONSTRAINT `classes_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `classes` ADD CONSTRAINT `c_s_fk` FOREIGN KEY (`school_id`) REFERENCES `schools`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `classes` ADD CONSTRAINT `c_g_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plan_items` ADD CONSTRAINT `course_plan_items_plan_id_course_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `course_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plan_items` ADD CONSTRAINT `cpi_p_fk` FOREIGN KEY (`plan_id`) REFERENCES `course_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `cp_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `cp_s_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `cp_t_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_plans` ADD CONSTRAINT `cp_cb_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_selections` ADD CONSTRAINT `course_selections_course_id_elective_courses_id_fk` FOREIGN KEY (`course_id`) REFERENCES `elective_courses`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `course_selections` ADD CONSTRAINT `course_selections_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `error_book_items` ADD CONSTRAINT `error_book_items_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `error_book_items` ADD CONSTRAINT `error_book_items_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `error_book_reviews` ADD CONSTRAINT `error_book_reviews_item_id_error_book_items_id_fk` FOREIGN KEY (`item_id`) REFERENCES `error_book_items`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `error_book_reviews` ADD CONSTRAINT `error_book_reviews_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_submission_id_exam_submissions_id_fk` FOREIGN KEY (`submission_id`) REFERENCES `exam_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_questions` ADD CONSTRAINT `exam_questions_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_questions` ADD CONSTRAINT `exam_questions_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_submissions` ADD CONSTRAINT `exam_submissions_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exam_submissions` ADD CONSTRAINT `exam_submissions_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exams` ADD CONSTRAINT `exams_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exams` ADD CONSTRAINT `exams_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `exams` ADD CONSTRAINT `exams_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `file_attachments` ADD CONSTRAINT `file_attachments_uploader_id_users_id_fk` FOREIGN KEY (`uploader_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_appeals` ADD CONSTRAINT `grade_appeals_grade_record_id_grade_records_id_fk` FOREIGN KEY (`grade_record_id`) REFERENCES `grade_records`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_appeals` ADD CONSTRAINT `grade_appeals_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_appeals` ADD CONSTRAINT `grade_appeals_reviewer_id_users_id_fk` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_drafts` ADD CONSTRAINT `grade_drafts_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_drafts` ADD CONSTRAINT `grade_drafts_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_drafts` ADD CONSTRAINT `grade_drafts_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_record_answers` ADD CONSTRAINT `grade_record_answers_grade_record_id_grade_records_id_fk` FOREIGN KEY (`grade_record_id`) REFERENCES `grade_records`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_record_answers` ADD CONSTRAINT `grade_record_answers_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_record_answers` ADD CONSTRAINT `gra_gr_fk` FOREIGN KEY (`grade_record_id`) REFERENCES `grade_records`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_record_answers` ADD CONSTRAINT `gra_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_recorded_by_users_id_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `gr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `gr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `gr_sub_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grade_records` ADD CONSTRAINT `gr_rb_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grades` ADD CONSTRAINT `g_s_fk` FOREIGN KEY (`school_id`) REFERENCES `schools`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grades` ADD CONSTRAINT `g_gh_fk` FOREIGN KEY (`grade_head_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `grades` ADD CONSTRAINT `g_th_fk` FOREIGN KEY (`teaching_head_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_answers` ADD CONSTRAINT `hw_ans_sub_fk` FOREIGN KEY (`submission_id`) REFERENCES `homework_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_answers` ADD CONSTRAINT `hw_ans_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignment_questions` ADD CONSTRAINT `hw_aq_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignment_questions` ADD CONSTRAINT `hw_aq_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignment_targets` ADD CONSTRAINT `hw_at_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignment_targets` ADD CONSTRAINT `hw_at_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignments` ADD CONSTRAINT `hw_asg_exam_fk` FOREIGN KEY (`source_exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_assignments` ADD CONSTRAINT `hw_asg_creator_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_submissions` ADD CONSTRAINT `hw_sub_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `homework_submissions` ADD CONSTRAINT `hw_sub_student_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `knowledge_point_mastery` ADD CONSTRAINT `kpm_student_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `knowledge_point_mastery` ADD CONSTRAINT `kpm_kp_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `knowledge_point_prerequisites` ADD CONSTRAINT `kp_prereq_kp_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `knowledge_point_prerequisites` ADD CONSTRAINT `kp_prereq_prereq_fk` FOREIGN KEY (`prerequisite_kp_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_generated_by_users_id_fk` FOREIGN KEY (`generated_by`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_requester_id_users_id_fk` FOREIGN KEY (`requester_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `leave_requests_reviewer_id_users_id_fk` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `lr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `lr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `lr_rq_fk` FOREIGN KEY (`requester_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `leave_requests` ADD CONSTRAINT `lr_rv_fk` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_ai_evaluations` ADD CONSTRAINT `lesson_plan_ai_evaluations_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_analytics_daily` ADD CONSTRAINT `lesson_plan_analytics_daily_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_attachments` ADD CONSTRAINT `lesson_plan_attachments_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_attachments` ADD CONSTRAINT `lesson_plan_attachments_uploaded_by_users_id_fk` FOREIGN KEY (`uploaded_by`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_comments` ADD CONSTRAINT `lesson_plan_comments_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_comments` ADD CONSTRAINT `lesson_plan_comments_author_id_users_id_fk` FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_formative_items` ADD CONSTRAINT `lesson_plan_formative_items_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_formative_responses` ADD CONSTRAINT `lesson_plan_formative_responses_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_formative_responses` ADD CONSTRAINT `lpfr_item_fk` FOREIGN KEY (`item_id`) REFERENCES `lesson_plan_formative_items`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_review_records` ADD CONSTRAINT `lesson_plan_review_records_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_review_records` ADD CONSTRAINT `lesson_plan_review_records_reviewer_id_users_id_fk` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_standards` ADD CONSTRAINT `lesson_plan_standards_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_standards` ADD CONSTRAINT `lesson_plan_standards_standard_id_standards_id_fk` FOREIGN KEY (`standard_id`) REFERENCES `standards`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_standards` ADD CONSTRAINT `lesson_plan_standards_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_substitutes` ADD CONSTRAINT `lesson_plan_substitutes_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_substitutes` ADD CONSTRAINT `lesson_plan_substitutes_original_teacher_id_users_id_fk` FOREIGN KEY (`original_teacher_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_substitutes` ADD CONSTRAINT `lesson_plan_substitutes_substitute_teacher_id_users_id_fk` FOREIGN KEY (`substitute_teacher_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_substitutes` ADD CONSTRAINT `lesson_plan_substitutes_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_templates` ADD CONSTRAINT `lesson_plan_templates_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_versions` ADD CONSTRAINT `lesson_plan_versions_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plan_versions` ADD CONSTRAINT `lesson_plan_versions_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_textbook_id_textbooks_id_fk` FOREIGN KEY (`textbook_id`) REFERENCES `textbooks`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_chapter_id_chapters_id_fk` FOREIGN KEY (`chapter_id`) REFERENCES `chapters`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_drafts` ADD CONSTRAINT `message_drafts_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_drafts` ADD CONSTRAINT `message_drafts_receiver_id_users_id_fk` FOREIGN KEY (`receiver_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_notifications` ADD CONSTRAINT `message_notifications_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_reports` ADD CONSTRAINT `message_reports_reporter_id_users_id_fk` FOREIGN KEY (`reporter_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_reports` ADD CONSTRAINT `message_reports_message_id_messages_id_fk` FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_reports` ADD CONSTRAINT `message_reports_reported_user_id_users_id_fk` FOREIGN KEY (`reported_user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `message_templates` ADD CONSTRAINT `message_templates_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `messages` ADD CONSTRAINT `messages_sender_id_users_id_fk` FOREIGN KEY (`sender_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `messages` ADD CONSTRAINT `messages_receiver_id_users_id_fk` FOREIGN KEY (`receiver_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `notification_logs` ADD CONSTRAINT `notification_logs_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `notification_preferences` ADD CONSTRAINT `notification_preferences_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `notification_preferences` ADD CONSTRAINT `np_u_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `parent_student_relations` ADD CONSTRAINT `parent_student_relations_parent_id_users_id_fk` FOREIGN KEY (`parent_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `parent_student_relations` ADD CONSTRAINT `parent_student_relations_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `parent_student_relations` ADD CONSTRAINT `psr_p_fk` FOREIGN KEY (`parent_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `parent_student_relations` ADD CONSTRAINT `psr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `password_security` ADD CONSTRAINT `password_security_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `password_security` ADD CONSTRAINT `ps_u_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `practice_answers` ADD CONSTRAINT `practice_answers_session_id_practice_sessions_id_fk` FOREIGN KEY (`session_id`) REFERENCES `practice_sessions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `practice_answers` ADD CONSTRAINT `practice_answers_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `practice_answers` ADD CONSTRAINT `practice_answers_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `practice_sessions` ADD CONSTRAINT `practice_sessions_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `questions` ADD CONSTRAINT `questions_author_id_users_id_fk` FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `questions_to_knowledge_points` ADD CONSTRAINT `q_kp_qid_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `questions_to_knowledge_points` ADD CONSTRAINT `q_kp_kpid_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_role_id_roles_id_fk` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `sessions` ADD CONSTRAINT `sessions_userId_users_id_fk` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `standards` ADD CONSTRAINT `standards_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `standards` ADD CONSTRAINT `standards_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `standards` ADD CONSTRAINT `standards_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `submission_answers` ADD CONSTRAINT `submission_answers_submission_id_exam_submissions_id_fk` FOREIGN KEY (`submission_id`) REFERENCES `exam_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `submission_answers` ADD CONSTRAINT `submission_answers_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `user_blocks` ADD CONSTRAINT `user_blocks_blocker_id_users_id_fk` FOREIGN KEY (`blocker_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `user_blocks` ADD CONSTRAINT `user_blocks_blocked_id_users_id_fk` FOREIGN KEY (`blocked_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `users_to_roles` ADD CONSTRAINT `users_to_roles_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE `users_to_roles` ADD CONSTRAINT `users_to_roles_role_id_roles_id_fk` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE INDEX `academic_years_name_idx` ON `academic_years` (`name`);--> statement-breakpoint +CREATE INDEX `academic_years_active_idx` ON `academic_years` (`is_active`);--> statement-breakpoint +CREATE INDEX `account_userId_idx` ON `accounts` (`userId`);--> statement-breakpoint +CREATE INDEX `ai_provider_idx` ON `ai_providers` (`provider`);--> statement-breakpoint +CREATE INDEX `ai_provider_default_idx` ON `ai_providers` (`is_default`);--> statement-breakpoint +CREATE INDEX `ai_provider_visibility_idx` ON `ai_providers` (`visibility`);--> statement-breakpoint +CREATE INDEX `ai_provider_created_by_idx` ON `ai_providers` (`created_by`);--> statement-breakpoint +CREATE INDEX `announcement_reads_announcement_idx` ON `announcement_reads` (`announcement_id`);--> statement-breakpoint +CREATE INDEX `announcement_reads_user_idx` ON `announcement_reads` (`user_id`);--> statement-breakpoint +CREATE INDEX `announcements_author_idx` ON `announcements` (`author_id`);--> statement-breakpoint +CREATE INDEX `announcements_status_idx` ON `announcements` (`status`);--> statement-breakpoint +CREATE INDEX `announcements_type_idx` ON `announcements` (`type`);--> statement-breakpoint +CREATE INDEX `announcements_target_grade_idx` ON `announcements` (`target_grade_id`);--> statement-breakpoint +CREATE INDEX `announcements_target_class_idx` ON `announcements` (`target_class_id`);--> statement-breakpoint +CREATE INDEX `announcements_status_pinned_idx` ON `announcements` (`status`,`is_pinned`);--> statement-breakpoint +CREATE INDEX `attendance_records_student_idx` ON `attendance_records` (`student_id`);--> statement-breakpoint +CREATE INDEX `attendance_records_class_idx` ON `attendance_records` (`class_id`);--> statement-breakpoint +CREATE INDEX `attendance_records_date_idx` ON `attendance_records` (`date`);--> statement-breakpoint +CREATE INDEX `attendance_records_class_date_idx` ON `attendance_records` (`class_id`,`date`);--> statement-breakpoint +CREATE INDEX `attendance_records_student_date_idx` ON `attendance_records` (`student_id`,`date`);--> statement-breakpoint +CREATE INDEX `attendance_records_schedule_idx` ON `attendance_records` (`schedule_id`);--> statement-breakpoint +CREATE INDEX `attendance_records_recorded_by_idx` ON `attendance_records` (`recorded_by`);--> statement-breakpoint +CREATE INDEX `attendance_records_class_date_period_idx` ON `attendance_records` (`class_id`,`date`,`period`);--> statement-breakpoint +CREATE INDEX `attendance_rules_class_idx` ON `attendance_rules` (`class_id`);--> statement-breakpoint +CREATE INDEX `audit_logs_user_id_idx` ON `audit_logs` (`user_id`);--> statement-breakpoint +CREATE INDEX `audit_logs_module_idx` ON `audit_logs` (`module`);--> statement-breakpoint +CREATE INDEX `audit_logs_action_idx` ON `audit_logs` (`action`);--> statement-breakpoint +CREATE INDEX `audit_logs_status_idx` ON `audit_logs` (`status`);--> statement-breakpoint +CREATE INDEX `audit_logs_created_at_idx` ON `audit_logs` (`created_at`);--> statement-breakpoint +CREATE INDEX `textbook_idx` ON `chapters` (`textbook_id`);--> statement-breakpoint +CREATE INDEX `parent_id_idx` ON `chapters` (`parent_id`);--> statement-breakpoint +CREATE INDEX `class_enrollments_class_idx` ON `class_enrollments` (`class_id`);--> statement-breakpoint +CREATE INDEX `class_enrollments_student_idx` ON `class_enrollments` (`student_id`);--> statement-breakpoint +CREATE INDEX `class_invitation_codes_class_idx` ON `class_invitation_codes` (`class_id`);--> statement-breakpoint +CREATE INDEX `class_invitation_codes_status_expires_idx` ON `class_invitation_codes` (`class_invitation_code_status`,`expires_at`);--> statement-breakpoint +CREATE INDEX `class_schedule_class_idx` ON `class_schedule` (`class_id`);--> statement-breakpoint +CREATE INDEX `class_schedule_class_day_idx` ON `class_schedule` (`class_id`,`weekday`);--> statement-breakpoint +CREATE INDEX `class_subject_teachers_class_idx` ON `class_subject_teachers` (`class_id`);--> statement-breakpoint +CREATE INDEX `class_subject_teachers_teacher_idx` ON `class_subject_teachers` (`teacher_id`);--> statement-breakpoint +CREATE INDEX `class_subject_teachers_subject_id_idx` ON `class_subject_teachers` (`subject_id`);--> statement-breakpoint +CREATE INDEX `classes_teacher_idx` ON `classes` (`teacher_id`);--> statement-breakpoint +CREATE INDEX `classes_grade_idx` ON `classes` (`grade`);--> statement-breakpoint +CREATE INDEX `classes_school_idx` ON `classes` (`school_id`);--> statement-breakpoint +CREATE INDEX `classes_grade_id_idx` ON `classes` (`grade_id`);--> statement-breakpoint +CREATE INDEX `classrooms_name_idx` ON `classrooms` (`name`);--> statement-breakpoint +CREATE INDEX `course_plan_items_plan_idx` ON `course_plan_items` (`plan_id`);--> statement-breakpoint +CREATE INDEX `course_plan_items_plan_week_idx` ON `course_plan_items` (`plan_id`,`week`);--> statement-breakpoint +CREATE INDEX `course_plans_class_idx` ON `course_plans` (`class_id`);--> statement-breakpoint +CREATE INDEX `course_plans_teacher_idx` ON `course_plans` (`teacher_id`);--> statement-breakpoint +CREATE INDEX `course_plans_subject_idx` ON `course_plans` (`subject_id`);--> statement-breakpoint +CREATE INDEX `course_plans_status_idx` ON `course_plans` (`status`);--> statement-breakpoint +CREATE INDEX `course_plans_class_subject_idx` ON `course_plans` (`class_id`,`subject_id`);--> statement-breakpoint +CREATE INDEX `course_selections_course_idx` ON `course_selections` (`course_id`);--> statement-breakpoint +CREATE INDEX `course_selections_student_idx` ON `course_selections` (`student_id`);--> statement-breakpoint +CREATE INDEX `course_selections_status_idx` ON `course_selections` (`selection_status`);--> statement-breakpoint +CREATE INDEX `data_change_logs_table_name_idx` ON `data_change_logs` (`table_name`);--> statement-breakpoint +CREATE INDEX `data_change_logs_record_id_idx` ON `data_change_logs` (`record_id`);--> statement-breakpoint +CREATE INDEX `data_change_logs_action_idx` ON `data_change_logs` (`action`);--> statement-breakpoint +CREATE INDEX `data_change_logs_changed_by_idx` ON `data_change_logs` (`changed_by`);--> statement-breakpoint +CREATE INDEX `data_change_logs_created_at_idx` ON `data_change_logs` (`created_at`);--> statement-breakpoint +CREATE INDEX `departments_name_idx` ON `departments` (`name`);--> statement-breakpoint +CREATE INDEX `elective_courses_teacher_idx` ON `elective_courses` (`teacher_id`);--> statement-breakpoint +CREATE INDEX `elective_courses_subject_idx` ON `elective_courses` (`subject_id`);--> statement-breakpoint +CREATE INDEX `elective_courses_grade_idx` ON `elective_courses` (`grade_id`);--> statement-breakpoint +CREATE INDEX `elective_courses_status_idx` ON `elective_courses` (`status`);--> statement-breakpoint +CREATE INDEX `eb_item_student_idx` ON `error_book_items` (`student_id`);--> statement-breakpoint +CREATE INDEX `eb_item_student_status_idx` ON `error_book_items` (`student_id`,`error_status`);--> statement-breakpoint +CREATE INDEX `eb_item_student_review_idx` ON `error_book_items` (`student_id`,`next_review_at`);--> statement-breakpoint +CREATE INDEX `eb_item_question_idx` ON `error_book_items` (`question_id`);--> statement-breakpoint +CREATE INDEX `eb_item_subject_idx` ON `error_book_items` (`subject_id`);--> statement-breakpoint +CREATE INDEX `eb_item_source_idx` ON `error_book_items` (`source_type`,`source_id`);--> statement-breakpoint +CREATE INDEX `eb_review_item_idx` ON `error_book_reviews` (`item_id`);--> statement-breakpoint +CREATE INDEX `eb_review_student_idx` ON `error_book_reviews` (`student_id`);--> statement-breakpoint +CREATE INDEX `eb_review_student_reviewed_idx` ON `error_book_reviews` (`student_id`,`reviewed_at`);--> statement-breakpoint +CREATE INDEX `proctoring_submission_idx` ON `exam_proctoring_events` (`submission_id`);--> statement-breakpoint +CREATE INDEX `proctoring_student_idx` ON `exam_proctoring_events` (`student_id`);--> statement-breakpoint +CREATE INDEX `proctoring_exam_idx` ON `exam_proctoring_events` (`exam_id`);--> statement-breakpoint +CREATE INDEX `proctoring_event_type_idx` ON `exam_proctoring_events` (`event_type`);--> statement-breakpoint +CREATE INDEX `exam_student_idx` ON `exam_submissions` (`exam_id`,`student_id`);--> statement-breakpoint +CREATE INDEX `exams_subject_idx` ON `exams` (`subject_id`);--> statement-breakpoint +CREATE INDEX `exams_grade_idx` ON `exams` (`grade_id`);--> statement-breakpoint +CREATE INDEX `file_attachments_uploader_idx` ON `file_attachments` (`uploader_id`);--> statement-breakpoint +CREATE INDEX `file_attachments_target_idx` ON `file_attachments` (`target_type`,`target_id`);--> statement-breakpoint +CREATE INDEX `file_attachments_created_at_idx` ON `file_attachments` (`created_at`);--> statement-breakpoint +CREATE INDEX `ga_grade_record_idx` ON `grade_appeals` (`grade_record_id`);--> statement-breakpoint +CREATE INDEX `ga_student_idx` ON `grade_appeals` (`student_id`);--> statement-breakpoint +CREATE INDEX `ga_status_idx` ON `grade_appeals` (`appeal_status`);--> statement-breakpoint +CREATE INDEX `ga_reviewer_idx` ON `grade_appeals` (`reviewer_id`);--> statement-breakpoint +CREATE INDEX `ga_pending_lookup_idx` ON `grade_appeals` (`grade_record_id`,`appeal_status`);--> statement-breakpoint +CREATE INDEX `gd_user_updated_idx` ON `grade_drafts` (`user_id`,`updated_at`);--> statement-breakpoint +CREATE INDEX `gd_class_subject_lock_idx` ON `grade_drafts` (`class_id`,`subject_id`,`type`,`locked_by`);--> statement-breakpoint +CREATE INDEX `grade_record_answers_record_idx` ON `grade_record_answers` (`grade_record_id`);--> statement-breakpoint +CREATE INDEX `grade_record_answers_question_idx` ON `grade_record_answers` (`question_id`);--> statement-breakpoint +CREATE INDEX `grade_records_student_idx` ON `grade_records` (`student_id`);--> statement-breakpoint +CREATE INDEX `grade_records_class_idx` ON `grade_records` (`class_id`);--> statement-breakpoint +CREATE INDEX `grade_records_subject_idx` ON `grade_records` (`subject_id`);--> statement-breakpoint +CREATE INDEX `grade_records_exam_idx` ON `grade_records` (`exam_id`);--> statement-breakpoint +CREATE INDEX `grade_records_class_subject_idx` ON `grade_records` (`class_id`,`subject_id`);--> statement-breakpoint +CREATE INDEX `grade_records_recorded_by_idx` ON `grade_records` (`recorded_by`);--> statement-breakpoint +CREATE INDEX `grades_school_idx` ON `grades` (`school_id`);--> statement-breakpoint +CREATE INDEX `grades_school_name_uniq` ON `grades` (`school_id`,`name`);--> statement-breakpoint +CREATE INDEX `grades_grade_head_idx` ON `grades` (`grade_head_id`);--> statement-breakpoint +CREATE INDEX `grades_teaching_head_idx` ON `grades` (`teaching_head_id`);--> statement-breakpoint +CREATE INDEX `hw_answer_submission_idx` ON `homework_answers` (`submission_id`);--> statement-breakpoint +CREATE INDEX `hw_answer_submission_question_idx` ON `homework_answers` (`submission_id`,`question_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_questions_assignment_idx` ON `homework_assignment_questions` (`assignment_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_targets_assignment_idx` ON `homework_assignment_targets` (`assignment_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_targets_student_idx` ON `homework_assignment_targets` (`student_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_creator_idx` ON `homework_assignments` (`creator_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_source_exam_idx` ON `homework_assignments` (`source_exam_id`);--> statement-breakpoint +CREATE INDEX `hw_assignment_status_idx` ON `homework_assignments` (`status`);--> statement-breakpoint +CREATE INDEX `hw_assignment_student_idx` ON `homework_submissions` (`assignment_id`,`student_id`);--> statement-breakpoint +CREATE INDEX `invitation_codes_code_idx` ON `invitation_codes` (`code`);--> statement-breakpoint +CREATE INDEX `invitation_codes_email_idx` ON `invitation_codes` (`email`);--> statement-breakpoint +CREATE INDEX `invitation_codes_used_by_idx` ON `invitation_codes` (`used_by`);--> statement-breakpoint +CREATE INDEX `mastery_student_idx` ON `knowledge_point_mastery` (`student_id`);--> statement-breakpoint +CREATE INDEX `mastery_kp_idx` ON `knowledge_point_mastery` (`knowledge_point_id`);--> statement-breakpoint +CREATE INDEX `kp_prereq_kp_idx` ON `knowledge_point_prerequisites` (`knowledge_point_id`);--> statement-breakpoint +CREATE INDEX `kp_prereq_prereq_idx` ON `knowledge_point_prerequisites` (`prerequisite_kp_id`);--> statement-breakpoint +CREATE INDEX `parent_id_idx` ON `knowledge_points` (`parent_id`);--> statement-breakpoint +CREATE INDEX `kp_chapter_id_idx` ON `knowledge_points` (`chapter_id`);--> statement-breakpoint +CREATE INDEX `diagnostic_student_idx` ON `learning_diagnostic_reports` (`student_id`);--> statement-breakpoint +CREATE INDEX `diagnostic_generated_by_idx` ON `learning_diagnostic_reports` (`generated_by`);--> statement-breakpoint +CREATE INDEX `diagnostic_status_idx` ON `learning_diagnostic_reports` (`report_status`);--> statement-breakpoint +CREATE INDEX `diagnostic_report_type_idx` ON `learning_diagnostic_reports` (`report_type`);--> statement-breakpoint +CREATE INDEX `diagnostic_class_idx` ON `learning_diagnostic_reports` (`class_id`);--> statement-breakpoint +CREATE INDEX `diagnostic_grade_idx` ON `learning_diagnostic_reports` (`grade_id`);--> statement-breakpoint +CREATE INDEX `leave_requests_student_idx` ON `leave_requests` (`student_id`);--> statement-breakpoint +CREATE INDEX `leave_requests_requester_idx` ON `leave_requests` (`requester_id`);--> statement-breakpoint +CREATE INDEX `leave_requests_class_idx` ON `leave_requests` (`class_id`);--> statement-breakpoint +CREATE INDEX `leave_requests_status_idx` ON `leave_requests` (`leave_status`);--> statement-breakpoint +CREATE INDEX `leave_requests_reviewer_idx` ON `leave_requests` (`reviewer_id`);--> statement-breakpoint +CREATE INDEX `leave_requests_class_status_idx` ON `leave_requests` (`class_id`,`leave_status`);--> statement-breakpoint +CREATE INDEX `leave_requests_student_status_idx` ON `leave_requests` (`student_id`,`leave_status`);--> statement-breakpoint +CREATE INDEX `lpae_plan_version_idx` ON `lesson_plan_ai_evaluations` (`plan_id`,`version_no`);--> statement-breakpoint +CREATE INDEX `lpae_plan_idx` ON `lesson_plan_ai_evaluations` (`plan_id`);--> statement-breakpoint +CREATE INDEX `lpad_date_idx` ON `lesson_plan_analytics_daily` (`snapshot_date`);--> statement-breakpoint +CREATE INDEX `lpad_subject_grade_idx` ON `lesson_plan_analytics_daily` (`subject_id`,`grade_id`);--> statement-breakpoint +CREATE INDEX `lpa_plan_idx` ON `lesson_plan_attachments` (`plan_id`);--> statement-breakpoint +CREATE INDEX `lpa_block_idx` ON `lesson_plan_attachments` (`block_id`);--> statement-breakpoint +CREATE INDEX `lpa_file_idx` ON `lesson_plan_attachments` (`file_id`);--> statement-breakpoint +CREATE INDEX `lpc_plan_block_idx` ON `lesson_plan_comments` (`plan_id`,`block_id`);--> statement-breakpoint +CREATE INDEX `lpc_author_idx` ON `lesson_plan_comments` (`author_id`);--> statement-breakpoint +CREATE INDEX `lpfi_plan_block_idx` ON `lesson_plan_formative_items` (`plan_id`,`block_id`);--> statement-breakpoint +CREATE INDEX `lpfr_item_idx` ON `lesson_plan_formative_responses` (`item_id`);--> statement-breakpoint +CREATE INDEX `lpfr_student_idx` ON `lesson_plan_formative_responses` (`student_id`);--> statement-breakpoint +CREATE INDEX `lpfr_class_idx` ON `lesson_plan_formative_responses` (`class_id`);--> statement-breakpoint +CREATE INDEX `lprr_plan_created_idx` ON `lesson_plan_review_records` (`plan_id`,`created_at`);--> statement-breakpoint +CREATE INDEX `lprr_reviewer_idx` ON `lesson_plan_review_records` (`reviewer_id`);--> statement-breakpoint +CREATE INDEX `lps_standard_idx` ON `lesson_plan_standards` (`standard_id`);--> statement-breakpoint +CREATE INDEX `lps_plan_idx` ON `lesson_plan_substitutes` (`plan_id`);--> statement-breakpoint +CREATE INDEX `lps_original_teacher_idx` ON `lesson_plan_substitutes` (`original_teacher_id`);--> statement-breakpoint +CREATE INDEX `lps_substitute_teacher_idx` ON `lesson_plan_substitutes` (`substitute_teacher_id`);--> statement-breakpoint +CREATE INDEX `lps_date_range_idx` ON `lesson_plan_substitutes` (`start_date`,`end_date`);--> statement-breakpoint +CREATE INDEX `lpt_type_creator_idx` ON `lesson_plan_templates` (`type`,`creator_id`);--> statement-breakpoint +CREATE INDEX `lpv_plan_version_idx` ON `lesson_plan_versions` (`plan_id`,`version_no`);--> statement-breakpoint +CREATE INDEX `lpv_plan_created_idx` ON `lesson_plan_versions` (`plan_id`,`created_at`);--> statement-breakpoint +CREATE INDEX `lp_creator_idx` ON `lesson_plans` (`creator_id`);--> statement-breakpoint +CREATE INDEX `lp_status_idx` ON `lesson_plans` (`status`);--> statement-breakpoint +CREATE INDEX `lp_textbook_chapter_idx` ON `lesson_plans` (`textbook_id`,`chapter_id`);--> statement-breakpoint +CREATE INDEX `lp_subject_grade_idx` ON `lesson_plans` (`subject_id`,`grade_id`);--> statement-breakpoint +CREATE INDEX `login_logs_user_id_idx` ON `login_logs` (`user_id`);--> statement-breakpoint +CREATE INDEX `login_logs_user_email_idx` ON `login_logs` (`user_email`);--> statement-breakpoint +CREATE INDEX `login_logs_action_idx` ON `login_logs` (`action`);--> statement-breakpoint +CREATE INDEX `login_logs_status_idx` ON `login_logs` (`status`);--> statement-breakpoint +CREATE INDEX `login_logs_created_at_idx` ON `login_logs` (`created_at`);--> statement-breakpoint +CREATE INDEX `message_drafts_user_idx` ON `message_drafts` (`user_id`);--> statement-breakpoint +CREATE INDEX `message_drafts_user_updated_idx` ON `message_drafts` (`user_id`,`updated_at`);--> statement-breakpoint +CREATE INDEX `message_drafts_user_parent_idx` ON `message_drafts` (`user_id`,`parent_message_id`);--> statement-breakpoint +CREATE INDEX `message_notifications_user_idx` ON `message_notifications` (`user_id`);--> statement-breakpoint +CREATE INDEX `message_notifications_is_read_idx` ON `message_notifications` (`is_read`);--> statement-breakpoint +CREATE INDEX `message_notifications_user_read_idx` ON `message_notifications` (`user_id`,`is_read`);--> statement-breakpoint +CREATE INDEX `message_notifications_created_at_idx` ON `message_notifications` (`created_at`);--> statement-breakpoint +CREATE INDEX `message_notifications_priority_idx` ON `message_notifications` (`priority`);--> statement-breakpoint +CREATE INDEX `message_notifications_user_archived_idx` ON `message_notifications` (`user_id`,`is_archived`);--> statement-breakpoint +CREATE INDEX `message_reports_reporter_idx` ON `message_reports` (`reporter_id`);--> statement-breakpoint +CREATE INDEX `message_reports_message_idx` ON `message_reports` (`message_id`);--> statement-breakpoint +CREATE INDEX `message_reports_reported_user_idx` ON `message_reports` (`reported_user_id`);--> statement-breakpoint +CREATE INDEX `message_reports_status_idx` ON `message_reports` (`status`);--> statement-breakpoint +CREATE INDEX `message_templates_user_idx` ON `message_templates` (`user_id`);--> statement-breakpoint +CREATE INDEX `message_templates_user_sort_idx` ON `message_templates` (`user_id`,`sort_order`);--> statement-breakpoint +CREATE INDEX `messages_sender_idx` ON `messages` (`sender_id`);--> statement-breakpoint +CREATE INDEX `messages_receiver_idx` ON `messages` (`receiver_id`);--> statement-breakpoint +CREATE INDEX `messages_is_read_idx` ON `messages` (`is_read`);--> statement-breakpoint +CREATE INDEX `messages_parent_idx` ON `messages` (`parent_message_id`);--> statement-breakpoint +CREATE INDEX `messages_receiver_read_idx` ON `messages` (`receiver_id`,`is_read`);--> statement-breakpoint +CREATE INDEX `messages_receiver_starred_idx` ON `messages` (`receiver_id`,`is_starred`);--> statement-breakpoint +CREATE INDEX `messages_group_message_idx` ON `messages` (`group_message_id`);--> statement-breakpoint +CREATE INDEX `notification_logs_user_idx` ON `notification_logs` (`user_id`);--> statement-breakpoint +CREATE INDEX `notification_logs_channel_idx` ON `notification_logs` (`channel`);--> statement-breakpoint +CREATE INDEX `notification_logs_status_idx` ON `notification_logs` (`status`);--> statement-breakpoint +CREATE INDEX `notification_logs_sent_at_idx` ON `notification_logs` (`sent_at`);--> statement-breakpoint +CREATE INDEX `notification_preferences_user_idx` ON `notification_preferences` (`user_id`);--> statement-breakpoint +CREATE INDEX `parent_student_relations_parent_idx` ON `parent_student_relations` (`parent_id`);--> statement-breakpoint +CREATE INDEX `parent_student_relations_student_idx` ON `parent_student_relations` (`student_id`);--> statement-breakpoint +CREATE INDEX `password_security_user_idx` ON `password_security` (`user_id`);--> statement-breakpoint +CREATE INDEX `pa_session_idx` ON `practice_answers` (`session_id`);--> statement-breakpoint +CREATE INDEX `pa_student_idx` ON `practice_answers` (`student_id`);--> statement-breakpoint +CREATE INDEX `pa_question_idx` ON `practice_answers` (`question_id`);--> statement-breakpoint +CREATE INDEX `pa_session_order_idx` ON `practice_answers` (`session_id`,`order_index`);--> statement-breakpoint +CREATE INDEX `ps_student_idx` ON `practice_sessions` (`student_id`);--> statement-breakpoint +CREATE INDEX `ps_student_status_idx` ON `practice_sessions` (`student_id`,`practice_status`);--> statement-breakpoint +CREATE INDEX `ps_subject_idx` ON `practice_sessions` (`subject_id`);--> statement-breakpoint +CREATE INDEX `parent_id_idx` ON `questions` (`parent_id`);--> statement-breakpoint +CREATE INDEX `author_id_idx` ON `questions` (`author_id`);--> statement-breakpoint +CREATE INDEX `kp_idx` ON `questions_to_knowledge_points` (`knowledge_point_id`);--> statement-breakpoint +CREATE INDEX `role_permissions_role_idx` ON `role_permissions` (`role_id`);--> statement-breakpoint +CREATE INDEX `schedule_changes_class_idx` ON `schedule_changes` (`class_id`);--> statement-breakpoint +CREATE INDEX `schedule_changes_status_idx` ON `schedule_changes` (`status`);--> statement-breakpoint +CREATE INDEX `schedule_changes_requested_by_idx` ON `schedule_changes` (`requested_by`);--> statement-breakpoint +CREATE INDEX `schedule_changes_original_schedule_idx` ON `schedule_changes` (`original_schedule_id`);--> statement-breakpoint +CREATE INDEX `scheduling_rules_class_idx` ON `scheduling_rules` (`class_id`);--> statement-breakpoint +CREATE INDEX `schools_name_idx` ON `schools` (`name`);--> statement-breakpoint +CREATE INDEX `schools_code_idx` ON `schools` (`code`);--> statement-breakpoint +CREATE INDEX `session_userId_idx` ON `sessions` (`userId`);--> statement-breakpoint +CREATE INDEX `std_parent_idx` ON `standards` (`parent_id`);--> statement-breakpoint +CREATE INDEX `std_subject_grade_idx` ON `standards` (`subject_id`,`grade_id`);--> statement-breakpoint +CREATE INDEX `std_level_idx` ON `standards` (`level`);--> statement-breakpoint +CREATE INDEX `subjects_name_idx` ON `subjects` (`name`);--> statement-breakpoint +CREATE INDEX `submission_idx` ON `submission_answers` (`submission_id`);--> statement-breakpoint +CREATE INDEX `ss_category_idx` ON `system_settings` (`category`);--> statement-breakpoint +CREATE INDEX `user_blocks_blocker_idx` ON `user_blocks` (`blocker_id`);--> statement-breakpoint +CREATE INDEX `email_idx` ON `users` (`email`);--> statement-breakpoint +CREATE INDEX `users_grade_id_idx` ON `users` (`grade_id`);--> statement-breakpoint +CREATE INDEX `users_department_id_idx` ON `users` (`department_id`);--> statement-breakpoint +CREATE INDEX `user_id_idx` ON `users_to_roles` (`user_id`); \ No newline at end of file diff --git a/drizzle/0000_perfect_pestilence.sql b/drizzle/0000_perfect_pestilence.sql deleted file mode 100644 index 7339a20..0000000 --- a/drizzle/0000_perfect_pestilence.sql +++ /dev/null @@ -1,816 +0,0 @@ -CREATE TABLE `academic_years` ( - `id` varchar(128) NOT NULL, - `name` varchar(100) NOT NULL, - `start_date` timestamp NOT NULL, - `end_date` timestamp NOT NULL, - `is_active` boolean NOT NULL DEFAULT false, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `academic_years_id` PRIMARY KEY(`id`), - CONSTRAINT `academic_years_name_unique` UNIQUE(`name`) -); ---> statement-breakpoint -CREATE TABLE `accounts` ( - `userId` varchar(128) NOT NULL, - `type` varchar(255) NOT NULL, - `provider` varchar(255) NOT NULL, - `providerAccountId` varchar(255) NOT NULL, - `refresh_token` text, - `access_token` text, - `expires_at` int, - `token_type` varchar(255), - `scope` varchar(255), - `id_token` text, - `session_state` varchar(255), - CONSTRAINT `accounts_provider_providerAccountId_pk` PRIMARY KEY(`provider`,`providerAccountId`) -); ---> statement-breakpoint -CREATE TABLE `ai_providers` ( - `id` varchar(128) NOT NULL, - `provider` enum('zhipu','openai','gemini','custom') NOT NULL, - `base_url` varchar(512), - `model` varchar(128) NOT NULL, - `api_key_encrypted` text NOT NULL, - `api_key_last4` varchar(4), - `is_default` boolean NOT NULL DEFAULT false, - `created_by` varchar(128), - `updated_by` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `ai_providers_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `announcements` ( - `id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `content` text NOT NULL, - `type` enum('school','grade','class') NOT NULL DEFAULT 'school', - `status` enum('draft','published','archived') NOT NULL DEFAULT 'draft', - `target_grade_id` varchar(128), - `target_class_id` varchar(128), - `author_id` varchar(128) NOT NULL, - `published_at` datetime, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `announcements_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `attendance_records` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `schedule_id` varchar(128), - `date` date NOT NULL, - `status` enum('present','absent','late','early_leave','excused') NOT NULL, - `remark` text, - `recorded_by` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `attendance_records_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `attendance_rules` ( - `id` varchar(128) NOT NULL, - `class_id` varchar(128), - `late_threshold_minutes` int DEFAULT 15, - `early_leave_threshold_minutes` int DEFAULT 15, - `enable_auto_mark` boolean DEFAULT false, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `attendance_rules_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `audit_logs` ( - `id` varchar(128) NOT NULL, - `user_id` varchar(128) NOT NULL, - `user_name` varchar(255) NOT NULL, - `action` varchar(255) NOT NULL, - `module` varchar(128) NOT NULL, - `target_id` varchar(128), - `target_type` varchar(128), - `detail` text, - `ip_address` varchar(45), - `user_agent` varchar(512), - `status` enum('success','failure') NOT NULL DEFAULT 'success', - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `audit_logs_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `chapters` ( - `id` varchar(128) NOT NULL, - `textbook_id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `order` int DEFAULT 0, - `parent_id` varchar(128), - `content` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `chapters_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `class_enrollments` ( - `class_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `class_enrollment_status` enum('active','inactive') NOT NULL DEFAULT 'active', - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `class_enrollments_class_id_student_id_pk` PRIMARY KEY(`class_id`,`student_id`) -); ---> statement-breakpoint -CREATE TABLE `class_schedule` ( - `id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `weekday` int NOT NULL, - `start_time` varchar(5) NOT NULL, - `end_time` varchar(5) NOT NULL, - `course` varchar(255) NOT NULL, - `location` varchar(100), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `class_schedule_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `class_subject_teachers` ( - `class_id` varchar(128) NOT NULL, - `subject_id` varchar(128) NOT NULL, - `teacher_id` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `class_subject_teachers_class_id_subject_id_pk` PRIMARY KEY(`class_id`,`subject_id`) -); ---> statement-breakpoint -CREATE TABLE `classes` ( - `id` varchar(128) NOT NULL, - `school_name` varchar(255), - `school_id` varchar(128), - `name` varchar(255) NOT NULL, - `grade` varchar(50) NOT NULL, - `grade_id` varchar(128), - `homeroom` varchar(50), - `room` varchar(50), - `invitation_code` varchar(6), - `teacher_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `classes_id` PRIMARY KEY(`id`), - CONSTRAINT `classes_invitation_code_unique` UNIQUE(`invitation_code`) -); ---> statement-breakpoint -CREATE TABLE `classrooms` ( - `id` varchar(128) NOT NULL, - `name` varchar(255) NOT NULL, - `building` varchar(100), - `floor` int, - `capacity` int, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `classrooms_id` PRIMARY KEY(`id`), - CONSTRAINT `classrooms_name_unique` UNIQUE(`name`) -); ---> statement-breakpoint -CREATE TABLE `course_plan_items` ( - `id` varchar(128) NOT NULL, - `plan_id` varchar(128) NOT NULL, - `week` int NOT NULL, - `topic` varchar(255) NOT NULL, - `content` text, - `hours` int NOT NULL DEFAULT 2, - `textbook_chapter` varchar(255), - `notes` text, - `is_completed` boolean NOT NULL DEFAULT false, - `completed_at` date, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `course_plan_items_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `course_plans` ( - `id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `subject_id` varchar(128) NOT NULL, - `teacher_id` varchar(128) NOT NULL, - `academic_year_id` varchar(128), - `semester` enum('1','2') NOT NULL DEFAULT '1', - `total_hours` int NOT NULL DEFAULT 0, - `completed_hours` int NOT NULL DEFAULT 0, - `weekly_hours` int NOT NULL DEFAULT 0, - `start_date` date, - `end_date` date, - `syllabus` text, - `objectives` text, - `status` enum('planning','active','completed','paused') NOT NULL DEFAULT 'planning', - `created_by` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `course_plans_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `data_change_logs` ( - `id` varchar(128) NOT NULL, - `table_name` varchar(128) NOT NULL, - `record_id` varchar(128) NOT NULL, - `action` enum('create','update','delete') NOT NULL, - `old_value` text, - `new_value` text, - `changed_by` varchar(128) NOT NULL, - `changed_by_name` varchar(255) NOT NULL, - `ip_address` varchar(45), - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `data_change_logs_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `departments` ( - `id` varchar(128) NOT NULL, - `name` varchar(255) NOT NULL, - `description` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `departments_id` PRIMARY KEY(`id`), - CONSTRAINT `departments_name_unique` UNIQUE(`name`) -); ---> statement-breakpoint -CREATE TABLE `exam_questions` ( - `exam_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `score` int DEFAULT 0, - `order` int DEFAULT 0, - CONSTRAINT `exam_questions_exam_id_question_id_pk` PRIMARY KEY(`exam_id`,`question_id`) -); ---> statement-breakpoint -CREATE TABLE `exam_submissions` ( - `id` varchar(128) NOT NULL, - `exam_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `score` int, - `status` varchar(50) DEFAULT 'started', - `submitted_at` timestamp, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `exam_submissions_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `exams` ( - `id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `description` text, - `structure` json, - `creator_id` varchar(128) NOT NULL, - `subject_id` varchar(128), - `grade_id` varchar(128), - `start_time` timestamp, - `end_time` timestamp, - `status` varchar(50) DEFAULT 'draft', - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `exams_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `file_attachments` ( - `id` varchar(128) NOT NULL, - `filename` varchar(255) NOT NULL, - `original_name` varchar(255) NOT NULL, - `mime_type` varchar(128) NOT NULL, - `size` bigint NOT NULL, - `storage_path` varchar(512) NOT NULL, - `url` varchar(512), - `uploader_id` varchar(128) NOT NULL, - `target_type` varchar(128), - `target_id` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `file_attachments_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `grade_records` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `subject_id` varchar(128) NOT NULL, - `exam_id` varchar(128), - `academic_year_id` varchar(128), - `title` varchar(255) NOT NULL, - `score` decimal(6,2) NOT NULL, - `full_score` decimal(6,2) NOT NULL DEFAULT '100', - `type` enum('exam','quiz','homework','other') NOT NULL DEFAULT 'exam', - `semester` enum('1','2') NOT NULL DEFAULT '1', - `recorded_by` varchar(128) NOT NULL, - `remark` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `grade_records_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `grades` ( - `id` varchar(128) NOT NULL, - `school_id` varchar(128) NOT NULL, - `name` varchar(100) NOT NULL, - `order` int NOT NULL DEFAULT 0, - `grade_head_id` varchar(128), - `teaching_head_id` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `grades_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `homework_answers` ( - `id` varchar(128) NOT NULL, - `submission_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `answer_content` json, - `score` int, - `feedback` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `homework_answers_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `homework_assignment_questions` ( - `assignment_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `score` int DEFAULT 0, - `order` int DEFAULT 0, - CONSTRAINT `homework_assignment_questions_assignment_id_question_id_pk` PRIMARY KEY(`assignment_id`,`question_id`) -); ---> statement-breakpoint -CREATE TABLE `homework_assignment_targets` ( - `assignment_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `homework_assignment_targets_assignment_id_student_id_pk` PRIMARY KEY(`assignment_id`,`student_id`) -); ---> statement-breakpoint -CREATE TABLE `homework_assignments` ( - `id` varchar(128) NOT NULL, - `source_exam_id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `description` text, - `structure` json, - `status` varchar(50) DEFAULT 'draft', - `creator_id` varchar(128) NOT NULL, - `available_at` timestamp, - `due_at` timestamp, - `allow_late` boolean NOT NULL DEFAULT false, - `late_due_at` timestamp, - `max_attempts` int NOT NULL DEFAULT 1, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `homework_assignments_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `homework_submissions` ( - `id` varchar(128) NOT NULL, - `assignment_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `attempt_no` int NOT NULL DEFAULT 1, - `score` int, - `status` varchar(50) DEFAULT 'started', - `started_at` timestamp NOT NULL DEFAULT (now()), - `submitted_at` timestamp, - `is_late` boolean NOT NULL DEFAULT false, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `homework_submissions_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `knowledge_points` ( - `id` varchar(128) NOT NULL, - `name` varchar(255) NOT NULL, - `description` text, - `anchor_text` varchar(255), - `parent_id` varchar(128), - `chapter_id` varchar(128), - `level` int DEFAULT 0, - `order` int DEFAULT 0, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `knowledge_points_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `login_logs` ( - `id` varchar(128) NOT NULL, - `user_id` varchar(128), - `user_email` varchar(255) NOT NULL, - `action` enum('signin','signout','signup') NOT NULL, - `status` enum('success','failure') NOT NULL DEFAULT 'success', - `ip_address` varchar(45), - `user_agent` varchar(512), - `error_message` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `login_logs_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `message_notifications` ( - `id` varchar(128) NOT NULL, - `user_id` varchar(128) NOT NULL, - `type` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `content` text, - `link` varchar(512), - `is_read` boolean NOT NULL DEFAULT false, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `message_notifications_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `messages` ( - `id` varchar(128) NOT NULL, - `sender_id` varchar(128) NOT NULL, - `receiver_id` varchar(128) NOT NULL, - `subject` varchar(255), - `content` text NOT NULL, - `is_read` boolean NOT NULL DEFAULT false, - `read_at` timestamp, - `parent_message_id` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `messages_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `notification_preferences` ( - `id` varchar(128) NOT NULL, - `user_id` varchar(128) NOT NULL, - `email_enabled` boolean NOT NULL DEFAULT false, - `sms_enabled` boolean NOT NULL DEFAULT false, - `push_enabled` boolean NOT NULL DEFAULT true, - `homework_notifications` boolean NOT NULL DEFAULT true, - `grade_notifications` boolean NOT NULL DEFAULT true, - `announcement_notifications` boolean NOT NULL DEFAULT true, - `message_notifications` boolean NOT NULL DEFAULT true, - `attendance_notifications` boolean NOT NULL DEFAULT true, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `notification_preferences_id` PRIMARY KEY(`id`), - CONSTRAINT `notification_preferences_user_id_unique` UNIQUE(`user_id`) -); ---> statement-breakpoint -CREATE TABLE `parent_student_relations` ( - `id` varchar(128) NOT NULL, - `parent_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `relation` varchar(50), - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `parent_student_relations_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `password_security` ( - `id` varchar(128) NOT NULL, - `user_id` varchar(128) NOT NULL, - `failed_login_attempts` int NOT NULL DEFAULT 0, - `locked_until` timestamp, - `password_changed_at` timestamp NOT NULL DEFAULT (now()), - `must_change_password` boolean NOT NULL DEFAULT false, - `last_password_change` timestamp, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `password_security_id` PRIMARY KEY(`id`), - CONSTRAINT `password_security_user_id_unique` UNIQUE(`user_id`) -); ---> statement-breakpoint -CREATE TABLE `questions` ( - `id` varchar(128) NOT NULL, - `content` json NOT NULL, - `type` enum('single_choice','multiple_choice','text','judgment','composite') NOT NULL, - `difficulty` int DEFAULT 1, - `parent_id` varchar(128), - `author_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `questions_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `questions_to_knowledge_points` ( - `question_id` varchar(128) NOT NULL, - `knowledge_point_id` varchar(128) NOT NULL, - CONSTRAINT `questions_to_knowledge_points_question_id_knowledge_point_id_pk` PRIMARY KEY(`question_id`,`knowledge_point_id`) -); ---> statement-breakpoint -CREATE TABLE `role_permissions` ( - `role_id` varchar(128) NOT NULL, - `permission` varchar(100) NOT NULL, - CONSTRAINT `role_permissions_role_id_permission_pk` PRIMARY KEY(`role_id`,`permission`) -); ---> statement-breakpoint -CREATE TABLE `roles` ( - `id` varchar(128) NOT NULL, - `name` varchar(50) NOT NULL, - `description` varchar(255), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `roles_id` PRIMARY KEY(`id`), - CONSTRAINT `roles_name_unique` UNIQUE(`name`) -); ---> statement-breakpoint -CREATE TABLE `schedule_changes` ( - `id` varchar(128) NOT NULL, - `original_schedule_id` varchar(128), - `class_id` varchar(128) NOT NULL, - `original_teacher_id` varchar(128), - `substitute_teacher_id` varchar(128), - `original_date` date, - `new_date` date, - `new_start_time` varchar(10), - `new_end_time` varchar(10), - `reason` text, - `status` enum('pending','approved','rejected','completed') NOT NULL DEFAULT 'pending', - `requested_by` varchar(128) NOT NULL, - `approved_by` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `schedule_changes_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `scheduling_rules` ( - `id` varchar(128) NOT NULL, - `class_id` varchar(128), - `max_daily_hours` int DEFAULT 8, - `max_continuous_hours` int DEFAULT 2, - `lunch_break_start` varchar(10) DEFAULT '12:00', - `lunch_break_end` varchar(10) DEFAULT '13:00', - `morning_start` varchar(10) DEFAULT '08:00', - `afternoon_end` varchar(10) DEFAULT '17:00', - `avoid_back_to_back` boolean DEFAULT false, - `balanced_subjects` boolean DEFAULT true, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `scheduling_rules_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `schools` ( - `id` varchar(128) NOT NULL, - `name` varchar(255) NOT NULL, - `code` varchar(50), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `schools_id` PRIMARY KEY(`id`), - CONSTRAINT `schools_name_unique` UNIQUE(`name`), - CONSTRAINT `schools_code_unique` UNIQUE(`code`) -); ---> statement-breakpoint -CREATE TABLE `sessions` ( - `sessionToken` varchar(255) NOT NULL, - `userId` varchar(128) NOT NULL, - `expires` timestamp NOT NULL, - CONSTRAINT `sessions_sessionToken` PRIMARY KEY(`sessionToken`) -); ---> statement-breakpoint -CREATE TABLE `subjects` ( - `id` varchar(128) NOT NULL, - `name` varchar(100) NOT NULL, - `code` varchar(50), - `order` int DEFAULT 0, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `subjects_id` PRIMARY KEY(`id`), - CONSTRAINT `subjects_name_unique` UNIQUE(`name`), - CONSTRAINT `subjects_code_unique` UNIQUE(`code`) -); ---> statement-breakpoint -CREATE TABLE `submission_answers` ( - `id` varchar(128) NOT NULL, - `submission_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `answer_content` json, - `score` int, - `feedback` text, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `submission_answers_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `textbooks` ( - `id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `subject` varchar(100) NOT NULL, - `grade` varchar(50), - `publisher` varchar(100), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `textbooks_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `users` ( - `id` varchar(128) NOT NULL, - `name` varchar(255), - `email` varchar(255) NOT NULL, - `emailVerified` timestamp, - `image` varchar(255), - `password` varchar(255), - `phone` varchar(30), - `address` varchar(255), - `gender` varchar(20), - `age` int, - `grade_id` varchar(128), - `department_id` varchar(128), - `onboarded_at` timestamp, - `birth_date` date, - `guardian_name` varchar(255), - `guardian_phone` varchar(20), - `guardian_relation` varchar(50), - `consent_accepted_at` datetime, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `users_id` PRIMARY KEY(`id`), - CONSTRAINT `users_email_unique` UNIQUE(`email`) -); ---> statement-breakpoint -CREATE TABLE `users_to_roles` ( - `user_id` varchar(128) NOT NULL, - `role_id` varchar(128) NOT NULL, - CONSTRAINT `users_to_roles_user_id_role_id_pk` PRIMARY KEY(`user_id`,`role_id`) -); ---> statement-breakpoint -CREATE TABLE `verificationTokens` ( - `identifier` varchar(255) NOT NULL, - `token` varchar(255) NOT NULL, - `expires` timestamp NOT NULL, - CONSTRAINT `verificationTokens_identifier_token_pk` PRIMARY KEY(`identifier`,`token`) -); ---> statement-breakpoint -ALTER TABLE `accounts` ADD CONSTRAINT `accounts_userId_users_id_fk` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `announcements` ADD CONSTRAINT `announcements_author_id_users_id_fk` FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `attendance_records_recorded_by_users_id_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_records` ADD CONSTRAINT `ar_rb_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_rules` ADD CONSTRAINT `attendance_rules_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `attendance_rules` ADD CONSTRAINT `atr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `chapters` ADD CONSTRAINT `chapters_textbook_id_textbooks_id_fk` FOREIGN KEY (`textbook_id`) REFERENCES `textbooks`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_enrollments` ADD CONSTRAINT `ce_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_enrollments` ADD CONSTRAINT `ce_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_schedule` ADD CONSTRAINT `cs_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `class_subject_teachers_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `cst_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_subject_teachers` ADD CONSTRAINT `cst_s_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `classes` ADD CONSTRAINT `classes_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `classes` ADD CONSTRAINT `c_s_fk` FOREIGN KEY (`school_id`) REFERENCES `schools`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `classes` ADD CONSTRAINT `c_g_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plan_items` ADD CONSTRAINT `course_plan_items_plan_id_course_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `course_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plan_items` ADD CONSTRAINT `cpi_p_fk` FOREIGN KEY (`plan_id`) REFERENCES `course_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `course_plans_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `cp_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `cp_s_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `cp_t_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_plans` ADD CONSTRAINT `cp_cb_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_questions` ADD CONSTRAINT `exam_questions_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_questions` ADD CONSTRAINT `exam_questions_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_submissions` ADD CONSTRAINT `exam_submissions_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_submissions` ADD CONSTRAINT `exam_submissions_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exams` ADD CONSTRAINT `exams_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exams` ADD CONSTRAINT `exams_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exams` ADD CONSTRAINT `exams_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `file_attachments` ADD CONSTRAINT `file_attachments_uploader_id_users_id_fk` FOREIGN KEY (`uploader_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `grade_records_recorded_by_users_id_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `gr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `gr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `gr_sub_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grade_records` ADD CONSTRAINT `gr_rb_fk` FOREIGN KEY (`recorded_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grades` ADD CONSTRAINT `g_s_fk` FOREIGN KEY (`school_id`) REFERENCES `schools`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grades` ADD CONSTRAINT `g_gh_fk` FOREIGN KEY (`grade_head_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `grades` ADD CONSTRAINT `g_th_fk` FOREIGN KEY (`teaching_head_id`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_answers` ADD CONSTRAINT `hw_ans_sub_fk` FOREIGN KEY (`submission_id`) REFERENCES `homework_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_answers` ADD CONSTRAINT `hw_ans_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignment_questions` ADD CONSTRAINT `hw_aq_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignment_questions` ADD CONSTRAINT `hw_aq_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignment_targets` ADD CONSTRAINT `hw_at_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignment_targets` ADD CONSTRAINT `hw_at_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignments` ADD CONSTRAINT `hw_asg_exam_fk` FOREIGN KEY (`source_exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_assignments` ADD CONSTRAINT `hw_asg_creator_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_submissions` ADD CONSTRAINT `hw_sub_a_fk` FOREIGN KEY (`assignment_id`) REFERENCES `homework_assignments`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `homework_submissions` ADD CONSTRAINT `hw_sub_student_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `message_notifications` ADD CONSTRAINT `message_notifications_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `messages` ADD CONSTRAINT `messages_sender_id_users_id_fk` FOREIGN KEY (`sender_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `messages` ADD CONSTRAINT `messages_receiver_id_users_id_fk` FOREIGN KEY (`receiver_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `notification_preferences` ADD CONSTRAINT `notification_preferences_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `notification_preferences` ADD CONSTRAINT `np_u_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `parent_student_relations` ADD CONSTRAINT `parent_student_relations_parent_id_users_id_fk` FOREIGN KEY (`parent_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `parent_student_relations` ADD CONSTRAINT `parent_student_relations_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `parent_student_relations` ADD CONSTRAINT `psr_p_fk` FOREIGN KEY (`parent_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `parent_student_relations` ADD CONSTRAINT `psr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `password_security` ADD CONSTRAINT `password_security_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `password_security` ADD CONSTRAINT `ps_u_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `questions` ADD CONSTRAINT `questions_author_id_users_id_fk` FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `questions_to_knowledge_points` ADD CONSTRAINT `q_kp_qid_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `questions_to_knowledge_points` ADD CONSTRAINT `q_kp_kpid_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_role_id_roles_id_fk` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `sessions` ADD CONSTRAINT `sessions_userId_users_id_fk` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `submission_answers` ADD CONSTRAINT `submission_answers_submission_id_exam_submissions_id_fk` FOREIGN KEY (`submission_id`) REFERENCES `exam_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `submission_answers` ADD CONSTRAINT `submission_answers_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `users_to_roles` ADD CONSTRAINT `users_to_roles_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `users_to_roles` ADD CONSTRAINT `users_to_roles_role_id_roles_id_fk` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `academic_years_name_idx` ON `academic_years` (`name`);--> statement-breakpoint -CREATE INDEX `academic_years_active_idx` ON `academic_years` (`is_active`);--> statement-breakpoint -CREATE INDEX `account_userId_idx` ON `accounts` (`userId`);--> statement-breakpoint -CREATE INDEX `ai_provider_idx` ON `ai_providers` (`provider`);--> statement-breakpoint -CREATE INDEX `ai_provider_default_idx` ON `ai_providers` (`is_default`);--> statement-breakpoint -CREATE INDEX `announcements_author_idx` ON `announcements` (`author_id`);--> statement-breakpoint -CREATE INDEX `announcements_status_idx` ON `announcements` (`status`);--> statement-breakpoint -CREATE INDEX `announcements_type_idx` ON `announcements` (`type`);--> statement-breakpoint -CREATE INDEX `announcements_target_grade_idx` ON `announcements` (`target_grade_id`);--> statement-breakpoint -CREATE INDEX `announcements_target_class_idx` ON `announcements` (`target_class_id`);--> statement-breakpoint -CREATE INDEX `attendance_records_student_idx` ON `attendance_records` (`student_id`);--> statement-breakpoint -CREATE INDEX `attendance_records_class_idx` ON `attendance_records` (`class_id`);--> statement-breakpoint -CREATE INDEX `attendance_records_date_idx` ON `attendance_records` (`date`);--> statement-breakpoint -CREATE INDEX `attendance_records_class_date_idx` ON `attendance_records` (`class_id`,`date`);--> statement-breakpoint -CREATE INDEX `attendance_records_student_date_idx` ON `attendance_records` (`student_id`,`date`);--> statement-breakpoint -CREATE INDEX `attendance_records_schedule_idx` ON `attendance_records` (`schedule_id`);--> statement-breakpoint -CREATE INDEX `attendance_records_recorded_by_idx` ON `attendance_records` (`recorded_by`);--> statement-breakpoint -CREATE INDEX `attendance_rules_class_idx` ON `attendance_rules` (`class_id`);--> statement-breakpoint -CREATE INDEX `audit_logs_user_id_idx` ON `audit_logs` (`user_id`);--> statement-breakpoint -CREATE INDEX `audit_logs_module_idx` ON `audit_logs` (`module`);--> statement-breakpoint -CREATE INDEX `audit_logs_action_idx` ON `audit_logs` (`action`);--> statement-breakpoint -CREATE INDEX `audit_logs_status_idx` ON `audit_logs` (`status`);--> statement-breakpoint -CREATE INDEX `audit_logs_created_at_idx` ON `audit_logs` (`created_at`);--> statement-breakpoint -CREATE INDEX `textbook_idx` ON `chapters` (`textbook_id`);--> statement-breakpoint -CREATE INDEX `parent_id_idx` ON `chapters` (`parent_id`);--> statement-breakpoint -CREATE INDEX `class_enrollments_class_idx` ON `class_enrollments` (`class_id`);--> statement-breakpoint -CREATE INDEX `class_enrollments_student_idx` ON `class_enrollments` (`student_id`);--> statement-breakpoint -CREATE INDEX `class_schedule_class_idx` ON `class_schedule` (`class_id`);--> statement-breakpoint -CREATE INDEX `class_schedule_class_day_idx` ON `class_schedule` (`class_id`,`weekday`);--> statement-breakpoint -CREATE INDEX `class_subject_teachers_class_idx` ON `class_subject_teachers` (`class_id`);--> statement-breakpoint -CREATE INDEX `class_subject_teachers_teacher_idx` ON `class_subject_teachers` (`teacher_id`);--> statement-breakpoint -CREATE INDEX `class_subject_teachers_subject_id_idx` ON `class_subject_teachers` (`subject_id`);--> statement-breakpoint -CREATE INDEX `classes_teacher_idx` ON `classes` (`teacher_id`);--> statement-breakpoint -CREATE INDEX `classes_grade_idx` ON `classes` (`grade`);--> statement-breakpoint -CREATE INDEX `classes_school_idx` ON `classes` (`school_id`);--> statement-breakpoint -CREATE INDEX `classes_grade_id_idx` ON `classes` (`grade_id`);--> statement-breakpoint -CREATE INDEX `classrooms_name_idx` ON `classrooms` (`name`);--> statement-breakpoint -CREATE INDEX `course_plan_items_plan_idx` ON `course_plan_items` (`plan_id`);--> statement-breakpoint -CREATE INDEX `course_plan_items_plan_week_idx` ON `course_plan_items` (`plan_id`,`week`);--> statement-breakpoint -CREATE INDEX `course_plans_class_idx` ON `course_plans` (`class_id`);--> statement-breakpoint -CREATE INDEX `course_plans_teacher_idx` ON `course_plans` (`teacher_id`);--> statement-breakpoint -CREATE INDEX `course_plans_subject_idx` ON `course_plans` (`subject_id`);--> statement-breakpoint -CREATE INDEX `course_plans_status_idx` ON `course_plans` (`status`);--> statement-breakpoint -CREATE INDEX `course_plans_class_subject_idx` ON `course_plans` (`class_id`,`subject_id`);--> statement-breakpoint -CREATE INDEX `data_change_logs_table_name_idx` ON `data_change_logs` (`table_name`);--> statement-breakpoint -CREATE INDEX `data_change_logs_record_id_idx` ON `data_change_logs` (`record_id`);--> statement-breakpoint -CREATE INDEX `data_change_logs_action_idx` ON `data_change_logs` (`action`);--> statement-breakpoint -CREATE INDEX `data_change_logs_changed_by_idx` ON `data_change_logs` (`changed_by`);--> statement-breakpoint -CREATE INDEX `data_change_logs_created_at_idx` ON `data_change_logs` (`created_at`);--> statement-breakpoint -CREATE INDEX `departments_name_idx` ON `departments` (`name`);--> statement-breakpoint -CREATE INDEX `exam_student_idx` ON `exam_submissions` (`exam_id`,`student_id`);--> statement-breakpoint -CREATE INDEX `exams_subject_idx` ON `exams` (`subject_id`);--> statement-breakpoint -CREATE INDEX `exams_grade_idx` ON `exams` (`grade_id`);--> statement-breakpoint -CREATE INDEX `file_attachments_uploader_idx` ON `file_attachments` (`uploader_id`);--> statement-breakpoint -CREATE INDEX `file_attachments_target_idx` ON `file_attachments` (`target_type`,`target_id`);--> statement-breakpoint -CREATE INDEX `file_attachments_created_at_idx` ON `file_attachments` (`created_at`);--> statement-breakpoint -CREATE INDEX `grade_records_student_idx` ON `grade_records` (`student_id`);--> statement-breakpoint -CREATE INDEX `grade_records_class_idx` ON `grade_records` (`class_id`);--> statement-breakpoint -CREATE INDEX `grade_records_subject_idx` ON `grade_records` (`subject_id`);--> statement-breakpoint -CREATE INDEX `grade_records_exam_idx` ON `grade_records` (`exam_id`);--> statement-breakpoint -CREATE INDEX `grade_records_class_subject_idx` ON `grade_records` (`class_id`,`subject_id`);--> statement-breakpoint -CREATE INDEX `grade_records_recorded_by_idx` ON `grade_records` (`recorded_by`);--> statement-breakpoint -CREATE INDEX `grades_school_idx` ON `grades` (`school_id`);--> statement-breakpoint -CREATE INDEX `grades_school_name_uniq` ON `grades` (`school_id`,`name`);--> statement-breakpoint -CREATE INDEX `grades_grade_head_idx` ON `grades` (`grade_head_id`);--> statement-breakpoint -CREATE INDEX `grades_teaching_head_idx` ON `grades` (`teaching_head_id`);--> statement-breakpoint -CREATE INDEX `hw_answer_submission_idx` ON `homework_answers` (`submission_id`);--> statement-breakpoint -CREATE INDEX `hw_answer_submission_question_idx` ON `homework_answers` (`submission_id`,`question_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_questions_assignment_idx` ON `homework_assignment_questions` (`assignment_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_targets_assignment_idx` ON `homework_assignment_targets` (`assignment_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_targets_student_idx` ON `homework_assignment_targets` (`student_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_creator_idx` ON `homework_assignments` (`creator_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_source_exam_idx` ON `homework_assignments` (`source_exam_id`);--> statement-breakpoint -CREATE INDEX `hw_assignment_status_idx` ON `homework_assignments` (`status`);--> statement-breakpoint -CREATE INDEX `hw_assignment_student_idx` ON `homework_submissions` (`assignment_id`,`student_id`);--> statement-breakpoint -CREATE INDEX `parent_id_idx` ON `knowledge_points` (`parent_id`);--> statement-breakpoint -CREATE INDEX `kp_chapter_id_idx` ON `knowledge_points` (`chapter_id`);--> statement-breakpoint -CREATE INDEX `login_logs_user_id_idx` ON `login_logs` (`user_id`);--> statement-breakpoint -CREATE INDEX `login_logs_user_email_idx` ON `login_logs` (`user_email`);--> statement-breakpoint -CREATE INDEX `login_logs_action_idx` ON `login_logs` (`action`);--> statement-breakpoint -CREATE INDEX `login_logs_status_idx` ON `login_logs` (`status`);--> statement-breakpoint -CREATE INDEX `login_logs_created_at_idx` ON `login_logs` (`created_at`);--> statement-breakpoint -CREATE INDEX `message_notifications_user_idx` ON `message_notifications` (`user_id`);--> statement-breakpoint -CREATE INDEX `message_notifications_is_read_idx` ON `message_notifications` (`is_read`);--> statement-breakpoint -CREATE INDEX `message_notifications_user_read_idx` ON `message_notifications` (`user_id`,`is_read`);--> statement-breakpoint -CREATE INDEX `message_notifications_created_at_idx` ON `message_notifications` (`created_at`);--> statement-breakpoint -CREATE INDEX `messages_sender_idx` ON `messages` (`sender_id`);--> statement-breakpoint -CREATE INDEX `messages_receiver_idx` ON `messages` (`receiver_id`);--> statement-breakpoint -CREATE INDEX `messages_is_read_idx` ON `messages` (`is_read`);--> statement-breakpoint -CREATE INDEX `messages_parent_idx` ON `messages` (`parent_message_id`);--> statement-breakpoint -CREATE INDEX `messages_receiver_read_idx` ON `messages` (`receiver_id`,`is_read`);--> statement-breakpoint -CREATE INDEX `notification_preferences_user_idx` ON `notification_preferences` (`user_id`);--> statement-breakpoint -CREATE INDEX `parent_student_relations_parent_idx` ON `parent_student_relations` (`parent_id`);--> statement-breakpoint -CREATE INDEX `parent_student_relations_student_idx` ON `parent_student_relations` (`student_id`);--> statement-breakpoint -CREATE INDEX `password_security_user_idx` ON `password_security` (`user_id`);--> statement-breakpoint -CREATE INDEX `parent_id_idx` ON `questions` (`parent_id`);--> statement-breakpoint -CREATE INDEX `author_id_idx` ON `questions` (`author_id`);--> statement-breakpoint -CREATE INDEX `kp_idx` ON `questions_to_knowledge_points` (`knowledge_point_id`);--> statement-breakpoint -CREATE INDEX `role_permissions_role_idx` ON `role_permissions` (`role_id`);--> statement-breakpoint -CREATE INDEX `schedule_changes_class_idx` ON `schedule_changes` (`class_id`);--> statement-breakpoint -CREATE INDEX `schedule_changes_status_idx` ON `schedule_changes` (`status`);--> statement-breakpoint -CREATE INDEX `schedule_changes_requested_by_idx` ON `schedule_changes` (`requested_by`);--> statement-breakpoint -CREATE INDEX `schedule_changes_original_schedule_idx` ON `schedule_changes` (`original_schedule_id`);--> statement-breakpoint -CREATE INDEX `scheduling_rules_class_idx` ON `scheduling_rules` (`class_id`);--> statement-breakpoint -CREATE INDEX `schools_name_idx` ON `schools` (`name`);--> statement-breakpoint -CREATE INDEX `schools_code_idx` ON `schools` (`code`);--> statement-breakpoint -CREATE INDEX `session_userId_idx` ON `sessions` (`userId`);--> statement-breakpoint -CREATE INDEX `subjects_name_idx` ON `subjects` (`name`);--> statement-breakpoint -CREATE INDEX `submission_idx` ON `submission_answers` (`submission_id`);--> statement-breakpoint -CREATE INDEX `email_idx` ON `users` (`email`);--> statement-breakpoint -CREATE INDEX `users_grade_id_idx` ON `users` (`grade_id`);--> statement-breakpoint -CREATE INDEX `users_department_id_idx` ON `users` (`department_id`);--> statement-breakpoint -CREATE INDEX `user_id_idx` ON `users_to_roles` (`user_id`); \ No newline at end of file diff --git a/drizzle/0001_heavy_sage.sql b/drizzle/0001_heavy_sage.sql deleted file mode 100644 index 0af3690..0000000 --- a/drizzle/0001_heavy_sage.sql +++ /dev/null @@ -1,115 +0,0 @@ -CREATE TABLE `course_selections` ( - `id` varchar(128) NOT NULL, - `course_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `selection_status` enum('selected','enrolled','waitlist','dropped','rejected') NOT NULL DEFAULT 'selected', - `priority` int DEFAULT 1, - `selected_at` timestamp NOT NULL DEFAULT (now()), - `enrolled_at` timestamp, - `dropped_at` timestamp, - `lottery_rank` int, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `course_selections_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `elective_courses` ( - `id` varchar(128) NOT NULL, - `name` varchar(255) NOT NULL, - `subject_id` varchar(128), - `teacher_id` varchar(128) NOT NULL, - `grade_id` varchar(128), - `description` text, - `capacity` int NOT NULL DEFAULT 30, - `enrolled_count` int NOT NULL DEFAULT 0, - `classroom` varchar(100), - `schedule` varchar(255), - `start_date` date, - `end_date` date, - `selection_start_at` datetime, - `selection_end_at` datetime, - `status` enum('draft','open','closed','cancelled') NOT NULL DEFAULT 'draft', - `selection_mode` enum('fcfs','lottery') NOT NULL DEFAULT 'fcfs', - `credit` decimal(3,1) DEFAULT '1.0', - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `elective_courses_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `exam_proctoring_events` ( - `id` varchar(128) NOT NULL, - `submission_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `exam_id` varchar(128) NOT NULL, - `event_type` enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout') NOT NULL, - `event_detail` text, - `occurred_at` timestamp NOT NULL DEFAULT (now()), - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `exam_proctoring_events_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `knowledge_point_mastery` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `knowledge_point_id` varchar(128) NOT NULL, - `mastery_level` decimal(5,2) NOT NULL DEFAULT '0', - `total_questions` int NOT NULL DEFAULT 0, - `correct_questions` int NOT NULL DEFAULT 0, - `last_assessed_at` timestamp NOT NULL DEFAULT (now()), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `knowledge_point_mastery_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `learning_diagnostic_reports` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `generated_by` varchar(128), - `report_type` enum('individual','class','grade') NOT NULL DEFAULT 'individual', - `period` varchar(50), - `summary` text, - `strengths` json, - `weaknesses` json, - `recommendations` json, - `overall_score` decimal(5,2), - `report_status` enum('draft','published','archived') NOT NULL DEFAULT 'draft', - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `learning_diagnostic_reports_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -ALTER TABLE `exams` ADD `exam_mode` enum('homework','timed','proctored') DEFAULT 'homework';--> statement-breakpoint -ALTER TABLE `exams` ADD `duration_minutes` int;--> statement-breakpoint -ALTER TABLE `exams` ADD `shuffle_questions` boolean DEFAULT false;--> statement-breakpoint -ALTER TABLE `exams` ADD `allow_late_start` boolean DEFAULT false;--> statement-breakpoint -ALTER TABLE `exams` ADD `late_start_grace_minutes` int DEFAULT 0;--> statement-breakpoint -ALTER TABLE `exams` ADD `anti_cheat_enabled` boolean DEFAULT false;--> statement-breakpoint -ALTER TABLE `course_selections` ADD CONSTRAINT `course_selections_course_id_elective_courses_id_fk` FOREIGN KEY (`course_id`) REFERENCES `elective_courses`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `course_selections` ADD CONSTRAINT `course_selections_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_teacher_id_users_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `elective_courses` ADD CONSTRAINT `elective_courses_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_submission_id_exam_submissions_id_fk` FOREIGN KEY (`submission_id`) REFERENCES `exam_submissions`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `exam_proctoring_events` ADD CONSTRAINT `exam_proctoring_events_exam_id_exams_id_fk` FOREIGN KEY (`exam_id`) REFERENCES `exams`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `knowledge_point_mastery` ADD CONSTRAINT `knowledge_point_mastery_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `knowledge_point_mastery` ADD CONSTRAINT `knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_generated_by_users_id_fk` FOREIGN KEY (`generated_by`) REFERENCES `users`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `course_selections_course_idx` ON `course_selections` (`course_id`);--> statement-breakpoint -CREATE INDEX `course_selections_student_idx` ON `course_selections` (`student_id`);--> statement-breakpoint -CREATE INDEX `course_selections_status_idx` ON `course_selections` (`selection_status`);--> statement-breakpoint -CREATE INDEX `elective_courses_teacher_idx` ON `elective_courses` (`teacher_id`);--> statement-breakpoint -CREATE INDEX `elective_courses_subject_idx` ON `elective_courses` (`subject_id`);--> statement-breakpoint -CREATE INDEX `elective_courses_grade_idx` ON `elective_courses` (`grade_id`);--> statement-breakpoint -CREATE INDEX `elective_courses_status_idx` ON `elective_courses` (`status`);--> statement-breakpoint -CREATE INDEX `proctoring_submission_idx` ON `exam_proctoring_events` (`submission_id`);--> statement-breakpoint -CREATE INDEX `proctoring_student_idx` ON `exam_proctoring_events` (`student_id`);--> statement-breakpoint -CREATE INDEX `proctoring_exam_idx` ON `exam_proctoring_events` (`exam_id`);--> statement-breakpoint -CREATE INDEX `proctoring_event_type_idx` ON `exam_proctoring_events` (`event_type`);--> statement-breakpoint -CREATE INDEX `mastery_student_idx` ON `knowledge_point_mastery` (`student_id`);--> statement-breakpoint -CREATE INDEX `mastery_kp_idx` ON `knowledge_point_mastery` (`knowledge_point_id`);--> statement-breakpoint -CREATE INDEX `diagnostic_student_idx` ON `learning_diagnostic_reports` (`student_id`);--> statement-breakpoint -CREATE INDEX `diagnostic_generated_by_idx` ON `learning_diagnostic_reports` (`generated_by`);--> statement-breakpoint -CREATE INDEX `diagnostic_status_idx` ON `learning_diagnostic_reports` (`report_status`);--> statement-breakpoint -CREATE INDEX `diagnostic_report_type_idx` ON `learning_diagnostic_reports` (`report_type`); \ No newline at end of file diff --git a/drizzle/0002_tiny_lionheart.sql b/drizzle/0002_tiny_lionheart.sql deleted file mode 100644 index b395f45..0000000 --- a/drizzle/0002_tiny_lionheart.sql +++ /dev/null @@ -1,58 +0,0 @@ -CREATE TABLE `lesson_plan_templates` ( - `id` varchar(128) NOT NULL, - `name` varchar(100) NOT NULL, - `type` varchar(50) NOT NULL, - `scope` varchar(50) NOT NULL, - `blocks` json NOT NULL, - `creator_id` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `lesson_plan_templates_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `lesson_plan_versions` ( - `id` varchar(128) NOT NULL, - `plan_id` varchar(128) NOT NULL, - `version_no` int NOT NULL, - `label` varchar(100), - `content` json NOT NULL, - `is_auto` boolean NOT NULL DEFAULT false, - `creator_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `lesson_plan_versions_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `lesson_plans` ( - `id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `textbook_id` varchar(128), - `chapter_id` varchar(128), - `course_plan_item_id` varchar(128), - `subject_id` varchar(128), - `grade_id` varchar(128), - `template_id` varchar(128), - `template_name` varchar(100), - `content` json NOT NULL, - `status` varchar(50) NOT NULL DEFAULT 'draft', - `creator_id` varchar(128) NOT NULL, - `last_saved_at` timestamp, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `lesson_plans_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -ALTER TABLE `lesson_plan_templates` ADD CONSTRAINT `lesson_plan_templates_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plan_versions` ADD CONSTRAINT `lesson_plan_versions_plan_id_lesson_plans_id_fk` FOREIGN KEY (`plan_id`) REFERENCES `lesson_plans`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plan_versions` ADD CONSTRAINT `lesson_plan_versions_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_textbook_id_textbooks_id_fk` FOREIGN KEY (`textbook_id`) REFERENCES `textbooks`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_chapter_id_chapters_id_fk` FOREIGN KEY (`chapter_id`) REFERENCES `chapters`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `lesson_plans` ADD CONSTRAINT `lesson_plans_creator_id_users_id_fk` FOREIGN KEY (`creator_id`) REFERENCES `users`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `lpt_type_creator_idx` ON `lesson_plan_templates` (`type`,`creator_id`);--> statement-breakpoint -CREATE INDEX `lpv_plan_version_idx` ON `lesson_plan_versions` (`plan_id`,`version_no`);--> statement-breakpoint -CREATE INDEX `lpv_plan_created_idx` ON `lesson_plan_versions` (`plan_id`,`created_at`);--> statement-breakpoint -CREATE INDEX `lp_creator_idx` ON `lesson_plans` (`creator_id`);--> statement-breakpoint -CREATE INDEX `lp_status_idx` ON `lesson_plans` (`status`);--> statement-breakpoint -CREATE INDEX `lp_textbook_chapter_idx` ON `lesson_plans` (`textbook_id`,`chapter_id`);--> statement-breakpoint -CREATE INDEX `lp_subject_grade_idx` ON `lesson_plans` (`subject_id`,`grade_id`); \ No newline at end of file diff --git a/drizzle/0003_diagnostic_student_nullable.sql b/drizzle/0003_diagnostic_student_nullable.sql deleted file mode 100644 index 47c8241..0000000 --- a/drizzle/0003_diagnostic_student_nullable.sql +++ /dev/null @@ -1,45 +0,0 @@ -CREATE TABLE `class_invitation_codes` ( - `id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `code` varchar(8) NOT NULL, - `class_invitation_code_status` enum('active','disabled','expired','exhausted') NOT NULL DEFAULT 'active', - `max_uses` int, - `used_count` int NOT NULL DEFAULT 0, - `expires_at` timestamp, - `created_by` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - `revoked_at` timestamp, - `revoked_by` varchar(128), - `note` varchar(255), - CONSTRAINT `class_invitation_codes_id` PRIMARY KEY(`id`), - CONSTRAINT `class_invitation_codes_code_unique` UNIQUE(`code`), - CONSTRAINT `class_invitation_codes_code_idx` UNIQUE(`code`) -); ---> statement-breakpoint -CREATE TABLE `system_settings` ( - `id` varchar(128) NOT NULL, - `category` varchar(50) NOT NULL, - `key` varchar(100) NOT NULL, - `value` text NOT NULL, - `value_type` varchar(20) NOT NULL DEFAULT 'string', - `updated_by` varchar(128), - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `system_settings_id` PRIMARY KEY(`id`), - CONSTRAINT `ss_category_key_idx` UNIQUE(`category`,`key`) -); ---> statement-breakpoint -ALTER TABLE `homework_assignments` MODIFY COLUMN `source_exam_id` varchar(128);--> statement-breakpoint -ALTER TABLE `learning_diagnostic_reports` MODIFY COLUMN `student_id` varchar(128);--> statement-breakpoint -ALTER TABLE `messages` ADD `sender_deleted_at` timestamp;--> statement-breakpoint -ALTER TABLE `messages` ADD `receiver_deleted_at` timestamp;--> statement-breakpoint -ALTER TABLE `notification_preferences` ADD `quiet_hours_enabled` boolean DEFAULT false NOT NULL;--> statement-breakpoint -ALTER TABLE `notification_preferences` ADD `quiet_hours_start` varchar(5);--> statement-breakpoint -ALTER TABLE `notification_preferences` ADD `quiet_hours_end` varchar(5);--> statement-breakpoint -ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `cic_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `class_invitation_codes_class_idx` ON `class_invitation_codes` (`class_id`);--> statement-breakpoint -CREATE INDEX `class_invitation_codes_status_expires_idx` ON `class_invitation_codes` (`class_invitation_code_status`,`expires_at`);--> statement-breakpoint -CREATE INDEX `ss_category_idx` ON `system_settings` (`category`); \ No newline at end of file diff --git a/drizzle/0004_calm_sandman.sql b/drizzle/0004_calm_sandman.sql deleted file mode 100644 index 541851f..0000000 --- a/drizzle/0004_calm_sandman.sql +++ /dev/null @@ -1,11 +0,0 @@ -CREATE TABLE `knowledge_point_prerequisites` ( - `knowledge_point_id` varchar(128) NOT NULL, - `prerequisite_kp_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `knowledge_point_prerequisites_knowledge_point_id_prerequisite_kp_id_pk` PRIMARY KEY(`knowledge_point_id`,`prerequisite_kp_id`) -); ---> statement-breakpoint -ALTER TABLE `knowledge_point_prerequisites` ADD CONSTRAINT `kp_prereq_kp_fk` FOREIGN KEY (`knowledge_point_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `knowledge_point_prerequisites` ADD CONSTRAINT `kp_prereq_prereq_fk` FOREIGN KEY (`prerequisite_kp_id`) REFERENCES `knowledge_points`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `kp_prereq_kp_idx` ON `knowledge_point_prerequisites` (`knowledge_point_id`);--> statement-breakpoint -CREATE INDEX `kp_prereq_prereq_idx` ON `knowledge_point_prerequisites` (`prerequisite_kp_id`); \ No newline at end of file diff --git a/drizzle/0005_messy_pride.sql b/drizzle/0005_messy_pride.sql deleted file mode 100644 index 39cbb60..0000000 --- a/drizzle/0005_messy_pride.sql +++ /dev/null @@ -1,48 +0,0 @@ -CREATE TABLE `error_book_items` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `source_type` enum('exam','homework','manual') NOT NULL DEFAULT 'manual', - `source_id` varchar(128), - `student_answer` json, - `correct_answer` json, - `subject_id` varchar(128), - `knowledge_point_ids` json, - `error_status` enum('new','learning','mastered','archived') NOT NULL DEFAULT 'new', - `mastery_level` int NOT NULL DEFAULT 0, - `next_review_at` timestamp, - `review_interval` int NOT NULL DEFAULT 1, - `review_count` int NOT NULL DEFAULT 0, - `correct_streak` int NOT NULL DEFAULT 0, - `note` text, - `error_tags` json, - `created_at` timestamp NOT NULL DEFAULT (now()), - `updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP, - CONSTRAINT `error_book_items_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -CREATE TABLE `error_book_reviews` ( - `id` varchar(128) NOT NULL, - `item_id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `review_result` enum('again','hard','good','easy') NOT NULL, - `reviewed_at` timestamp NOT NULL DEFAULT (now()), - `new_interval` int, - `new_mastery_level` int, - `created_at` timestamp NOT NULL DEFAULT (now()), - CONSTRAINT `error_book_reviews_id` PRIMARY KEY(`id`) -); ---> statement-breakpoint -ALTER TABLE `error_book_items` ADD CONSTRAINT `error_book_items_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `error_book_items` ADD CONSTRAINT `error_book_items_question_id_questions_id_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `error_book_reviews` ADD CONSTRAINT `error_book_reviews_item_id_error_book_items_id_fk` FOREIGN KEY (`item_id`) REFERENCES `error_book_items`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE `error_book_reviews` ADD CONSTRAINT `error_book_reviews_student_id_users_id_fk` FOREIGN KEY (`student_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `eb_item_student_idx` ON `error_book_items` (`student_id`);--> statement-breakpoint -CREATE INDEX `eb_item_student_status_idx` ON `error_book_items` (`student_id`,`error_status`);--> statement-breakpoint -CREATE INDEX `eb_item_student_review_idx` ON `error_book_items` (`student_id`,`next_review_at`);--> statement-breakpoint -CREATE INDEX `eb_item_question_idx` ON `error_book_items` (`question_id`);--> statement-breakpoint -CREATE INDEX `eb_item_subject_idx` ON `error_book_items` (`subject_id`);--> statement-breakpoint -CREATE INDEX `eb_item_source_idx` ON `error_book_items` (`source_type`,`source_id`);--> statement-breakpoint -CREATE INDEX `eb_review_item_idx` ON `error_book_reviews` (`item_id`);--> statement-breakpoint -CREATE INDEX `eb_review_student_idx` ON `error_book_reviews` (`student_id`);--> statement-breakpoint -CREATE INDEX `eb_review_student_reviewed_idx` ON `error_book_reviews` (`student_id`,`reviewed_at`); \ No newline at end of file diff --git a/drizzle/0006_notification_logs.sql b/drizzle/0006_notification_logs.sql deleted file mode 100644 index 5a4dde0..0000000 --- a/drizzle/0006_notification_logs.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE `notification_logs` ( - `id` varchar(128) PRIMARY KEY NOT NULL, - `user_id` varchar(128) NOT NULL, - `title` varchar(255) NOT NULL, - `channel` varchar(32) NOT NULL, - `status` varchar(16) NOT NULL, - `message_id` varchar(255), - `error` text, - `sent_at` timestamp DEFAULT (now()) NOT NULL, - CONSTRAINT `notification_logs_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action -); -CREATE INDEX `notification_logs_user_idx` ON `notification_logs`(`user_id`); -CREATE INDEX `notification_logs_channel_idx` ON `notification_logs`(`channel`); -CREATE INDEX `notification_logs_status_idx` ON `notification_logs`(`status`); -CREATE INDEX `notification_logs_sent_at_idx` ON `notification_logs`(`sent_at`); diff --git a/drizzle/0007_notification_priority_archive.sql b/drizzle/0007_notification_priority_archive.sql deleted file mode 100644 index a569881..0000000 --- a/drizzle/0007_notification_priority_archive.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `message_notifications` ADD COLUMN `priority` varchar(16) DEFAULT 'normal' NOT NULL; -ALTER TABLE `message_notifications` ADD COLUMN `is_archived` boolean DEFAULT false NOT NULL; -CREATE INDEX `message_notifications_priority_idx` ON `message_notifications`(`priority`); -CREATE INDEX `message_notifications_user_archived_idx` ON `message_notifications`(`user_id`, `is_archived`); diff --git a/drizzle/0008_message_star_draft.sql b/drizzle/0008_message_star_draft.sql deleted file mode 100644 index a3e6ab1..0000000 --- a/drizzle/0008_message_star_draft.sql +++ /dev/null @@ -1,17 +0,0 @@ -ALTER TABLE `messages` ADD COLUMN `is_starred` boolean DEFAULT false NOT NULL; -CREATE INDEX `messages_receiver_starred_idx` ON `messages`(`receiver_id`, `is_starred`); - -CREATE TABLE `message_drafts` ( - `id` varchar(128) PRIMARY KEY NOT NULL, - `user_id` varchar(128) NOT NULL, - `receiver_id` varchar(128), - `subject` varchar(255), - `content` text, - `parent_message_id` varchar(128), - `updated_at` timestamp DEFAULT (now()) ON UPDATE now() NOT NULL, - `created_at` timestamp DEFAULT (now()) NOT NULL, - CONSTRAINT `message_drafts_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action, - CONSTRAINT `message_drafts_receiver_id_users_id_fk` FOREIGN KEY (`receiver_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action -); -CREATE INDEX `message_drafts_user_idx` ON `message_drafts`(`user_id`); -CREATE INDEX `message_drafts_user_updated_idx` ON `message_drafts`(`user_id`, `updated_at`); diff --git a/drizzle/0009_announcement_pin_reads.sql b/drizzle/0009_announcement_pin_reads.sql deleted file mode 100644 index 7330993..0000000 --- a/drizzle/0009_announcement_pin_reads.sql +++ /dev/null @@ -1,14 +0,0 @@ -ALTER TABLE `announcements` ADD COLUMN `is_pinned` boolean DEFAULT false NOT NULL; -CREATE INDEX `announcements_status_pinned_idx` ON `announcements`(`status`, `is_pinned`); - -CREATE TABLE `announcement_reads` ( - `id` varchar(128) PRIMARY KEY NOT NULL, - `announcement_id` varchar(128) NOT NULL, - `user_id` varchar(128) NOT NULL, - `read_at` timestamp DEFAULT (now()) NOT NULL, - CONSTRAINT `announcement_reads_announcement_id_announcements_id_fk` FOREIGN KEY (`announcement_id`) REFERENCES `announcements`(`id`) ON DELETE cascade ON UPDATE no action, - CONSTRAINT `announcement_reads_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action -); -CREATE INDEX `announcement_reads_announcement_idx` ON `announcement_reads`(`announcement_id`); -CREATE INDEX `announcement_reads_user_idx` ON `announcement_reads`(`user_id`); -CREATE UNIQUE INDEX `announcement_reads_unique_idx` ON `announcement_reads`(`announcement_id`, `user_id`); diff --git a/drizzle/0010_grade_record_answers.sql b/drizzle/0010_grade_record_answers.sql deleted file mode 100644 index f0c4e36..0000000 --- a/drizzle/0010_grade_record_answers.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE `grade_record_answers` ( - `id` varchar(128) PRIMARY KEY NOT NULL, - `grade_record_id` varchar(128) NOT NULL, - `question_id` varchar(128) NOT NULL, - `score` decimal(6, 2) NOT NULL, - `full_score` decimal(6, 2) NOT NULL, - `feedback` text, - `created_at` timestamp DEFAULT (now()) NOT NULL, - `updated_at` timestamp DEFAULT (now()) NOT NULL, - CONSTRAINT `gra_gr_fk` FOREIGN KEY (`grade_record_id`) REFERENCES `grade_records`(`id`) ON DELETE cascade ON UPDATE no action, - CONSTRAINT `gra_q_fk` FOREIGN KEY (`question_id`) REFERENCES `questions`(`id`) ON DELETE cascade ON UPDATE no action -); -CREATE INDEX `grade_record_answers_record_idx` ON `grade_record_answers`(`grade_record_id`); -CREATE INDEX `grade_record_answers_question_idx` ON `grade_record_answers`(`question_id`); diff --git a/drizzle/0011_rbac_role_flags_and_seed.sql b/drizzle/0011_rbac_role_flags_and_seed.sql deleted file mode 100644 index 5288772..0000000 --- a/drizzle/0011_rbac_role_flags_and_seed.sql +++ /dev/null @@ -1,85 +0,0 @@ --- 0011_rbac_role_flags_and_seed.sql --- RBAC: add is_system/is_enabled columns to roles table and seed role_permissions. - --- 1. Add is_system and is_enabled columns to roles table. -ALTER TABLE `roles` - ADD COLUMN `is_system` boolean DEFAULT false NOT NULL, - ADD COLUMN `is_enabled` boolean DEFAULT true NOT NULL; - --- 2. Mark the 6 builtin roles as system roles. -UPDATE `roles` SET `is_system` = true - WHERE `name` IN ('admin', 'teacher', 'student', 'parent', 'grade_head', 'teaching_head'); - --- 3. Seed role_permissions for builtin roles. --- Uses INSERT IGNORE so re-running is safe (role_permissions has a composite PK). --- Permissions are resolved from ROLE_PERMISSIONS_SEED in src/shared/lib/permissions.ts. - --- admin -INSERT IGNORE INTO `role_permissions` (`role_id`, `permission`) - SELECT id, 'exam:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:duplicate' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:publish' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:ai_generate' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'homework:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'homework:grade' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'question:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'question:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'question:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'question:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'textbook:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'textbook:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'textbook:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'textbook:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:enroll' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'class:schedule' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'school:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'grade:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'user:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'user:profile_update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'ai:chat' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'ai:configure' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'settings:admin' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'audit_log:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'announcement:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'announcement:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'grade_record:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'grade_record:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'course_plan:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'course_plan:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'attendance:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'attendance:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'message:send' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'message:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'message:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'schedule:auto' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'schedule:adjust' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'elective:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'elective:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:proctor' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'exam:proctor:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'diagnostic:manage' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'diagnostic:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'lesson_plan:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'lesson_plan:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'lesson_plan:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'lesson_plan:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'lesson_plan:publish' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'file:upload' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'file:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'file:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'dashboard:admin_read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'error_book:analytics_read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'adaptive_practice:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'role:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'role:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'role:update' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'role:delete' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'role:assign' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'permission:read' FROM `roles` WHERE `name` = 'admin'; diff --git a/drizzle/0012_diagnostic_grade_id.sql b/drizzle/0012_diagnostic_grade_id.sql deleted file mode 100644 index 1e18525..0000000 --- a/drizzle/0012_diagnostic_grade_id.sql +++ /dev/null @@ -1,4 +0,0 @@ --- v4-P2-3: Add gradeId column to learning_diagnostic_reports for grade-level diagnostic reports -ALTER TABLE `learning_diagnostic_reports` ADD COLUMN `grade_id` varchar(128);--> statement-breakpoint -ALTER TABLE `learning_diagnostic_reports` ADD CONSTRAINT `learning_diagnostic_reports_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE set null ON UPDATE no action;--> statement-breakpoint -CREATE INDEX `diagnostic_grade_idx` ON `learning_diagnostic_reports` (`grade_id`); diff --git a/drizzle/0013_message_recall.sql b/drizzle/0013_message_recall.sql deleted file mode 100644 index 69c70df..0000000 --- a/drizzle/0013_message_recall.sql +++ /dev/null @@ -1,2 +0,0 @@ --- P2-4: 消息撤回功能(2 分钟窗口) -ALTER TABLE `messages` ADD COLUMN `recalled_at` timestamp; diff --git a/drizzle/0014_message_templates.sql b/drizzle/0014_message_templates.sql deleted file mode 100644 index c85bc33..0000000 --- a/drizzle/0014_message_templates.sql +++ /dev/null @@ -1,13 +0,0 @@ --- P2-6: 快捷回复模板 -CREATE TABLE `message_templates` ( - `id` varchar(128) PRIMARY KEY NOT NULL, - `user_id` varchar(128) NOT NULL, - `title` varchar(100) NOT NULL, - `content` text NOT NULL, - `sort_order` integer DEFAULT 0 NOT NULL, - `updated_at` timestamp DEFAULT (now()) ON UPDATE now() NOT NULL, - `created_at` timestamp DEFAULT (now()) NOT NULL, - CONSTRAINT `message_templates_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action -); -CREATE INDEX `message_templates_user_idx` ON `message_templates`(`user_id`); -CREATE INDEX `message_templates_user_sort_idx` ON `message_templates`(`user_id`, `sort_order`); diff --git a/drizzle/0015_group_messages.sql b/drizzle/0015_group_messages.sql deleted file mode 100644 index 7a3ea8a..0000000 --- a/drizzle/0015_group_messages.sql +++ /dev/null @@ -1,3 +0,0 @@ --- P2-2: 群组消息(教师→全班家长,fan-out on write) -ALTER TABLE `messages` ADD COLUMN `group_message_id` varchar(128); -CREATE INDEX `messages_group_message_idx` ON `messages`(`group_message_id`); diff --git a/drizzle/0016_invitation_codes.sql b/drizzle/0016_invitation_codes.sql deleted file mode 100644 index ea35d50..0000000 --- a/drizzle/0016_invitation_codes.sql +++ /dev/null @@ -1,19 +0,0 @@ --- audit-P2-3: 注册邀请码表(admin 批量生成,注册时校验 + 自动分配角色/班级) -CREATE TABLE IF NOT EXISTS `invitation_codes` ( - `id` serial PRIMARY KEY, - `code` varchar(64) NOT NULL, - `email` varchar(255), - `role` varchar(50) NOT NULL, - `class_id` varchar(128), - `notes` varchar(500), - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `created_by` varchar(128), - `expires_at` timestamp NULL, - `used_by` varchar(128), - `used_at` timestamp NULL, - UNIQUE KEY `invitation_codes_code_unique` (`code`) -); - -CREATE INDEX `invitation_codes_code_idx` ON `invitation_codes`(`code`); -CREATE INDEX `invitation_codes_email_idx` ON `invitation_codes`(`email`); -CREATE INDEX `invitation_codes_used_by_idx` ON `invitation_codes`(`used_by`); diff --git a/drizzle/0016_message_reports_and_blocks.sql b/drizzle/0016_message_reports_and_blocks.sql deleted file mode 100644 index 460ecf3..0000000 --- a/drizzle/0016_message_reports_and_blocks.sql +++ /dev/null @@ -1,35 +0,0 @@ --- P2-5: 消息举报 + 用户屏蔽 --- 1. message_reports: 举报记录(reporterId → messageId / reportedUserId) --- 2. user_blocks: 用户屏蔽关系(blockerId → blockedId,唯一约束防重复) - -CREATE TABLE `message_reports` ( - `id` varchar(128) NOT NULL, - `reporter_id` varchar(128) NOT NULL, - `message_id` varchar(128) NOT NULL, - `reported_user_id` varchar(128) NOT NULL, - `reason` varchar(50) NOT NULL, - `description` text, - `status` varchar(20) NOT NULL DEFAULT 'pending', - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - INDEX `message_reports_reporter_idx` (`reporter_id`), - INDEX `message_reports_message_idx` (`message_id`), - INDEX `message_reports_reported_user_idx` (`reported_user_id`), - INDEX `message_reports_status_idx` (`status`), - CONSTRAINT `message_reports_reporter_id_users_id_fk` FOREIGN KEY (`reporter_id`) REFERENCES `users`(`id`) ON DELETE CASCADE, - CONSTRAINT `message_reports_message_id_messages_id_fk` FOREIGN KEY (`message_id`) REFERENCES `messages`(`id`) ON DELETE CASCADE, - CONSTRAINT `message_reports_reported_user_id_users_id_fk` FOREIGN KEY (`reported_user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE -); - -CREATE TABLE `user_blocks` ( - `id` varchar(128) NOT NULL, - `blocker_id` varchar(128) NOT NULL, - `blocked_id` varchar(128) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - UNIQUE INDEX `user_blocks_blocker_blocked_uniq` (`blocker_id`, `blocked_id`), - INDEX `user_blocks_blocker_idx` (`blocker_id`), - CONSTRAINT `user_blocks_blocker_id_users_id_fk` FOREIGN KEY (`blocker_id`) REFERENCES `users`(`id`) ON DELETE CASCADE, - CONSTRAINT `user_blocks_blocked_id_users_id_fk` FOREIGN KEY (`blocked_id`) REFERENCES `users`(`id`) ON DELETE CASCADE -); diff --git a/drizzle/0017_draft_device_sync.sql b/drizzle/0017_draft_device_sync.sql deleted file mode 100644 index 69ae2db..0000000 --- a/drizzle/0017_draft_device_sync.sql +++ /dev/null @@ -1,8 +0,0 @@ --- P2-10: 跨设备草稿同步 --- 1. 新增 device_id 列(标识来源设备) --- 2. 新增 version 列(乐观锁,冲突检测) --- 3. 新增 (user_id, parent_message_id) 索引(按会话查询最新版本草稿) - -ALTER TABLE `message_drafts` ADD COLUMN `device_id` varchar(128); -ALTER TABLE `message_drafts` ADD COLUMN `version` int NOT NULL DEFAULT 1; -CREATE INDEX `message_drafts_user_parent_idx` ON `message_drafts`(`user_id`, `parent_message_id`); diff --git a/drizzle/0018_attendance_status_reason.sql b/drizzle/0018_attendance_status_reason.sql deleted file mode 100644 index 2c8c6ce..0000000 --- a/drizzle/0018_attendance_status_reason.sql +++ /dev/null @@ -1,11 +0,0 @@ --- L-1: 考勤状态细分 + 原因字段 --- 1. 扩展 attendance_records.status 枚举:新增 'school_activity'(校内活动请假,如运动会、研学、社团活动) --- 2. 新增 reason 字段:记录缺勤/迟到/早退/请假的具体原因(最多 255 字符),与 remark 区分 --- - remark:教师备注(自由文本,可记录点名时观察到的情况) --- - reason:标准化原因(用于统计与家长通知,如"病假-感冒"、"家中有事"等) - -ALTER TABLE `attendance_records` - MODIFY COLUMN `status` - ENUM('present','absent','late','early_leave','excused','school_activity') NOT NULL; - -ALTER TABLE `attendance_records` ADD COLUMN `reason` varchar(255); diff --git a/drizzle/0019_attendance_warning_thresholds.sql b/drizzle/0019_attendance_warning_thresholds.sql deleted file mode 100644 index e0ce62d..0000000 --- a/drizzle/0019_attendance_warning_thresholds.sql +++ /dev/null @@ -1,6 +0,0 @@ --- L-3:出勤率阈值预警 --- 新增 attendance_rate_threshold(出勤率阈值,默认 90%) --- 新增 consecutive_absence_threshold(连续缺勤阈值,默认 3 次) -ALTER TABLE `attendance_rules` - ADD COLUMN `attendance_rate_threshold` int DEFAULT 90, - ADD COLUMN `consecutive_absence_threshold` int DEFAULT 3; diff --git a/drizzle/0020_leave_requests.sql b/drizzle/0020_leave_requests.sql deleted file mode 100644 index 2ebc96e..0000000 --- a/drizzle/0020_leave_requests.sql +++ /dev/null @@ -1,53 +0,0 @@ --- 0020_leave_requests.sql --- L-5 在线请假流程:创建 leave_requests 表。 - -CREATE TABLE IF NOT EXISTS `leave_requests` ( - `id` varchar(128) NOT NULL, - `student_id` varchar(128) NOT NULL, - `requester_id` varchar(128) NOT NULL, - `class_id` varchar(128) NOT NULL, - `leave_type` enum('sick','personal','family','other') NOT NULL, - `start_date` date NOT NULL, - `end_date` date NOT NULL, - `reason` text NOT NULL, - `status` enum('pending','approved','rejected','cancelled') NOT NULL DEFAULT 'pending', - `reviewer_id` varchar(128) DEFAULT NULL, - `review_comment` text, - `reviewed_at` timestamp NULL DEFAULT NULL, - `attendance_synced` boolean NOT NULL DEFAULT false, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `leave_requests_student_idx` (`student_id`), - KEY `leave_requests_requester_idx` (`requester_id`), - KEY `leave_requests_class_idx` (`class_id`), - KEY `leave_requests_status_idx` (`status`), - KEY `leave_requests_reviewer_idx` (`reviewer_id`), - KEY `leave_requests_class_status_idx` (`class_id`, `status`), - KEY `leave_requests_student_status_idx` (`student_id`, `status`), - CONSTRAINT `lr_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`) ON DELETE CASCADE, - CONSTRAINT `lr_s_fk` FOREIGN KEY (`student_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - CONSTRAINT `lr_rq_fk` FOREIGN KEY (`requester_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - CONSTRAINT `lr_rv_fk` FOREIGN KEY (`reviewer_id`) REFERENCES `users` (`id`) ON DELETE SET NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- 为 builtin 角色注入新权限(INSERT IGNORE 幂等) --- admin:三个权限全有 -INSERT IGNORE INTO `role_permissions` (`role_id`, `permission`) - SELECT id, 'leave_request:create' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'admin' - UNION ALL SELECT id, 'leave_request:review' FROM `roles` WHERE `name` = 'admin' - -- teacher:read + review(班主任审批本班请假) - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'teacher' - UNION ALL SELECT id, 'leave_request:review' FROM `roles` WHERE `name` = 'teacher' - -- parent:create + read(代子女提交、查看子女请假记录) - UNION ALL SELECT id, 'leave_request:create' FROM `roles` WHERE `name` = 'parent' - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'parent' - -- student:create + read(本人提交、查看本人请假记录) - UNION ALL SELECT id, 'leave_request:create' FROM `roles` WHERE `name` = 'student' - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'student' - -- grade_head / teaching_head:read + review(年级主任/教务主任可审批) - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'grade_head' - UNION ALL SELECT id, 'leave_request:review' FROM `roles` WHERE `name` = 'grade_head' - UNION ALL SELECT id, 'leave_request:read' FROM `roles` WHERE `name` = 'teaching_head' - UNION ALL SELECT id, 'leave_request:review' FROM `roles` WHERE `name` = 'teaching_head'; diff --git a/drizzle/0021_attendance_period.sql b/drizzle/0021_attendance_period.sql deleted file mode 100644 index 0b937b5..0000000 --- a/drizzle/0021_attendance_period.sql +++ /dev/null @@ -1,20 +0,0 @@ --- 0021_attendance_period.sql --- L-6 节次考勤:为 attendance_records 表添加 period 字段。 --- --- 节次枚举: --- morning_reading 早读 --- morning 上午 --- afternoon 下午 --- evening 晚自习 --- full_day 全日(默认值,向后兼容:null 也表示全日) --- --- 向后兼容策略: --- - 新增 period 列为 NULLABLE,已有数据保持 NULL(视为 full_day) --- - 新记录由应用层显式写入 period;未指定时写入 'full_day' --- - 查询层 period IS NULL OR period = 'full_day' 均视为全日记录 - -ALTER TABLE `attendance_records` - ADD COLUMN `period` ENUM('morning_reading','morning','afternoon','evening','full_day') NULL DEFAULT NULL AFTER `date`; - --- 复合索引:班级 + 日期 + 节次,支持按节次查询班级当日点名 -CREATE INDEX `attendance_records_class_date_period_idx` ON `attendance_records` (`class_id`, `date`, `period`); diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json index 85f7e2f..a1fe520 100644 --- a/drizzle/meta/0000_snapshot.json +++ b/drizzle/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "5", "dialect": "mysql", - "id": "0ec4760a-6847-43de-8c01-13cb9676df8c", + "id": "8faf42f7-fb86-409b-91be-a8875fb70e27", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "academic_years": { @@ -225,7 +225,7 @@ }, "provider": { "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", + "type": "enum('zhipu','openai','gemini','custom','ollama')", "primaryKey": false, "notNull": true, "autoincrement": false @@ -266,6 +266,14 @@ "autoincrement": false, "default": false }, + "visibility": { + "name": "visibility", + "type": "enum('public','private')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'private'" + }, "created_by": { "name": "created_by", "type": "varchar(128)", @@ -312,6 +320,20 @@ "is_default" ], "isUnique": false + }, + "ai_provider_visibility_idx": { + "name": "ai_provider_visibility_idx", + "columns": [ + "visibility" + ], + "isUnique": false + }, + "ai_provider_created_by_idx": { + "name": "ai_provider_created_by_idx", + "columns": [ + "created_by" + ], + "isUnique": false } }, "foreignKeys": {}, @@ -326,6 +348,102 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "announcement_reads": { + "name": "announcement_reads", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "announcement_id": { + "name": "announcement_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "read_at": { + "name": "read_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "announcement_reads_announcement_idx": { + "name": "announcement_reads_announcement_idx", + "columns": [ + "announcement_id" + ], + "isUnique": false + }, + "announcement_reads_user_idx": { + "name": "announcement_reads_user_idx", + "columns": [ + "user_id" + ], + "isUnique": false + }, + "announcement_reads_unique_idx": { + "name": "announcement_reads_unique_idx", + "columns": [ + "announcement_id", + "user_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "announcement_reads_announcement_id_announcements_id_fk": { + "name": "announcement_reads_announcement_id_announcements_id_fk", + "tableFrom": "announcement_reads", + "tableTo": "announcements", + "columnsFrom": [ + "announcement_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "announcement_reads_user_id_users_id_fk": { + "name": "announcement_reads_user_id_users_id_fk", + "tableFrom": "announcement_reads", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "announcement_reads_id": { + "name": "announcement_reads_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "announcements": { "name": "announcements", "columns": { @@ -394,6 +512,14 @@ "notNull": false, "autoincrement": false }, + "is_pinned": { + "name": "is_pinned", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -447,6 +573,14 @@ "target_class_id" ], "isUnique": false + }, + "announcements_status_pinned_idx": { + "name": "announcements_status_pinned_idx", + "columns": [ + "status", + "is_pinned" + ], + "isUnique": false } }, "foreignKeys": { @@ -515,11 +649,18 @@ }, "status": { "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", + "type": "enum('present','absent','late','early_leave','excused','school_activity')", "primaryKey": false, "notNull": true, "autoincrement": false }, + "period": { + "name": "period", + "type": "enum('morning_reading','morning','afternoon','evening','full_day')", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, "remark": { "name": "remark", "type": "text", @@ -527,6 +668,13 @@ "notNull": false, "autoincrement": false }, + "reason": { + "name": "reason", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, "recorded_by": { "name": "recorded_by", "type": "varchar(128)", @@ -603,6 +751,15 @@ "recorded_by" ], "isUnique": false + }, + "attendance_records_class_date_period_idx": { + "name": "attendance_records_class_date_period_idx", + "columns": [ + "class_id", + "date", + "period" + ], + "isUnique": false } }, "foreignKeys": { @@ -737,6 +894,22 @@ "autoincrement": false, "default": false }, + "attendance_rate_threshold": { + "name": "attendance_rate_threshold", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 90 + }, + "consecutive_absence_threshold": { + "name": "consecutive_absence_threshold", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 3 + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -751,8 +924,7 @@ "primaryKey": false, "notNull": true, "autoincrement": false, - "onUpdate": true, - "default": "(now())" + "onUpdate": true } }, "indexes": { @@ -1138,6 +1310,189 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "class_invitation_codes": { + "name": "class_invitation_codes", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "code": { + "name": "code", + "type": "varchar(8)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_invitation_code_status": { + "name": "class_invitation_code_status", + "type": "enum('active','disabled','expired','exhausted')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'active'" + }, + "max_uses": { + "name": "max_uses", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "used_count": { + "name": "used_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_by": { + "name": "created_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + }, + "revoked_at": { + "name": "revoked_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked_by": { + "name": "revoked_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "note": { + "name": "note", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "class_invitation_codes_code_idx": { + "name": "class_invitation_codes_code_idx", + "columns": [ + "code" + ], + "isUnique": true + }, + "class_invitation_codes_class_idx": { + "name": "class_invitation_codes_class_idx", + "columns": [ + "class_id" + ], + "isUnique": false + }, + "class_invitation_codes_status_expires_idx": { + "name": "class_invitation_codes_status_expires_idx", + "columns": [ + "class_invitation_code_status", + "expires_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "class_invitation_codes_class_id_classes_id_fk": { + "name": "class_invitation_codes_class_id_classes_id_fk", + "tableFrom": "class_invitation_codes", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "class_invitation_codes_created_by_users_id_fk": { + "name": "class_invitation_codes_created_by_users_id_fk", + "tableFrom": "class_invitation_codes", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cic_c_fk": { + "name": "cic_c_fk", + "tableFrom": "class_invitation_codes", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "class_invitation_codes_id": { + "name": "class_invitation_codes_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "class_invitation_codes_code_unique": { + "name": "class_invitation_codes_code_unique", + "columns": [ + "code" + ] + } + }, + "checkConstraint": {} + }, "class_schedule": { "name": "class_schedule", "columns": { @@ -2068,6 +2423,169 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "course_selections": { + "name": "course_selections", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "course_id": { + "name": "course_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "selection_status": { + "name": "selection_status", + "type": "enum('selected','enrolled','waitlist','dropped','rejected')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'selected'" + }, + "priority": { + "name": "priority", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1 + }, + "selected_at": { + "name": "selected_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "enrolled_at": { + "name": "enrolled_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "dropped_at": { + "name": "dropped_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "drop_reason": { + "name": "drop_reason", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "lottery_rank": { + "name": "lottery_rank", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "course_selections_course_idx": { + "name": "course_selections_course_idx", + "columns": [ + "course_id" + ], + "isUnique": false + }, + "course_selections_student_idx": { + "name": "course_selections_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "course_selections_status_idx": { + "name": "course_selections_status_idx", + "columns": [ + "selection_status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "course_selections_course_id_elective_courses_id_fk": { + "name": "course_selections_course_id_elective_courses_id_fk", + "tableFrom": "course_selections", + "tableTo": "elective_courses", + "columnsFrom": [ + "course_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "course_selections_student_id_users_id_fk": { + "name": "course_selections_student_id_users_id_fk", + "tableFrom": "course_selections", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "course_selections_id": { + "name": "course_selections_id", + "columns": [ + "id" + ] + }, + "course_selections_course_id_student_id_pk": { + "name": "course_selections_course_id_student_id_pk", + "columns": [ + "course_id", + "student_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "data_change_logs": { "name": "data_change_logs", "columns": { @@ -2262,6 +2780,741 @@ }, "checkConstraint": {} }, + "elective_courses": { + "name": "elective_courses", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "teacher_id": { + "name": "teacher_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "grade_id": { + "name": "grade_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "capacity": { + "name": "capacity", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 30 + }, + "enrolled_count": { + "name": "enrolled_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "classroom": { + "name": "classroom", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "schedule": { + "name": "schedule", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "start_date": { + "name": "start_date", + "type": "date", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "end_date": { + "name": "end_date", + "type": "date", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "selection_start_at": { + "name": "selection_start_at", + "type": "datetime", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "selection_end_at": { + "name": "selection_end_at", + "type": "datetime", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "drop_deadline": { + "name": "drop_deadline", + "type": "datetime", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "enum('draft','open','closed','cancelled')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'draft'" + }, + "selection_mode": { + "name": "selection_mode", + "type": "enum('fcfs','lottery')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'fcfs'" + }, + "credit": { + "name": "credit", + "type": "decimal(3,1)", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'1.0'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "elective_courses_teacher_idx": { + "name": "elective_courses_teacher_idx", + "columns": [ + "teacher_id" + ], + "isUnique": false + }, + "elective_courses_subject_idx": { + "name": "elective_courses_subject_idx", + "columns": [ + "subject_id" + ], + "isUnique": false + }, + "elective_courses_grade_idx": { + "name": "elective_courses_grade_idx", + "columns": [ + "grade_id" + ], + "isUnique": false + }, + "elective_courses_status_idx": { + "name": "elective_courses_status_idx", + "columns": [ + "status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "elective_courses_subject_id_subjects_id_fk": { + "name": "elective_courses_subject_id_subjects_id_fk", + "tableFrom": "elective_courses", + "tableTo": "subjects", + "columnsFrom": [ + "subject_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "elective_courses_teacher_id_users_id_fk": { + "name": "elective_courses_teacher_id_users_id_fk", + "tableFrom": "elective_courses", + "tableTo": "users", + "columnsFrom": [ + "teacher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "elective_courses_grade_id_grades_id_fk": { + "name": "elective_courses_grade_id_grades_id_fk", + "tableFrom": "elective_courses", + "tableTo": "grades", + "columnsFrom": [ + "grade_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "elective_courses_id": { + "name": "elective_courses_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "error_book_items": { + "name": "error_book_items", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "question_id": { + "name": "question_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_type": { + "name": "source_type", + "type": "enum('exam','homework','manual')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'manual'" + }, + "source_id": { + "name": "source_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "student_answer": { + "name": "student_answer", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "correct_answer": { + "name": "correct_answer", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "knowledge_point_ids": { + "name": "knowledge_point_ids", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "error_status": { + "name": "error_status", + "type": "enum('new','learning','mastered','archived')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'new'" + }, + "mastery_level": { + "name": "mastery_level", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "next_review_at": { + "name": "next_review_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "review_interval": { + "name": "review_interval", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "review_count": { + "name": "review_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "correct_streak": { + "name": "correct_streak", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "note": { + "name": "note", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "error_tags": { + "name": "error_tags", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "eb_item_student_idx": { + "name": "eb_item_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "eb_item_student_status_idx": { + "name": "eb_item_student_status_idx", + "columns": [ + "student_id", + "error_status" + ], + "isUnique": false + }, + "eb_item_student_review_idx": { + "name": "eb_item_student_review_idx", + "columns": [ + "student_id", + "next_review_at" + ], + "isUnique": false + }, + "eb_item_question_idx": { + "name": "eb_item_question_idx", + "columns": [ + "question_id" + ], + "isUnique": false + }, + "eb_item_subject_idx": { + "name": "eb_item_subject_idx", + "columns": [ + "subject_id" + ], + "isUnique": false + }, + "eb_item_source_idx": { + "name": "eb_item_source_idx", + "columns": [ + "source_type", + "source_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "error_book_items_student_id_users_id_fk": { + "name": "error_book_items_student_id_users_id_fk", + "tableFrom": "error_book_items", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "error_book_items_question_id_questions_id_fk": { + "name": "error_book_items_question_id_questions_id_fk", + "tableFrom": "error_book_items", + "tableTo": "questions", + "columnsFrom": [ + "question_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "error_book_items_id": { + "name": "error_book_items_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "error_book_reviews": { + "name": "error_book_reviews", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "item_id": { + "name": "item_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "review_result": { + "name": "review_result", + "type": "enum('again','hard','good','easy')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reviewed_at": { + "name": "reviewed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "new_interval": { + "name": "new_interval", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "new_mastery_level": { + "name": "new_mastery_level", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "eb_review_item_idx": { + "name": "eb_review_item_idx", + "columns": [ + "item_id" + ], + "isUnique": false + }, + "eb_review_student_idx": { + "name": "eb_review_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "eb_review_student_reviewed_idx": { + "name": "eb_review_student_reviewed_idx", + "columns": [ + "student_id", + "reviewed_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "error_book_reviews_item_id_error_book_items_id_fk": { + "name": "error_book_reviews_item_id_error_book_items_id_fk", + "tableFrom": "error_book_reviews", + "tableTo": "error_book_items", + "columnsFrom": [ + "item_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "error_book_reviews_student_id_users_id_fk": { + "name": "error_book_reviews_student_id_users_id_fk", + "tableFrom": "error_book_reviews", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "error_book_reviews_id": { + "name": "error_book_reviews_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "exam_proctoring_events": { + "name": "exam_proctoring_events", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "submission_id": { + "name": "submission_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exam_id": { + "name": "exam_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "event_type": { + "name": "event_type", + "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "event_detail": { + "name": "event_detail", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "occurred_at": { + "name": "occurred_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "proctoring_submission_idx": { + "name": "proctoring_submission_idx", + "columns": [ + "submission_id" + ], + "isUnique": false + }, + "proctoring_student_idx": { + "name": "proctoring_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "proctoring_exam_idx": { + "name": "proctoring_exam_idx", + "columns": [ + "exam_id" + ], + "isUnique": false + }, + "proctoring_event_type_idx": { + "name": "proctoring_event_type_idx", + "columns": [ + "event_type" + ], + "isUnique": false + } + }, + "foreignKeys": { + "exam_proctoring_events_submission_id_exam_submissions_id_fk": { + "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", + "tableFrom": "exam_proctoring_events", + "tableTo": "exam_submissions", + "columnsFrom": [ + "submission_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "exam_proctoring_events_student_id_users_id_fk": { + "name": "exam_proctoring_events_student_id_users_id_fk", + "tableFrom": "exam_proctoring_events", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "exam_proctoring_events_exam_id_exams_id_fk": { + "name": "exam_proctoring_events_exam_id_exams_id_fk", + "tableFrom": "exam_proctoring_events", + "tableTo": "exams", + "columnsFrom": [ + "exam_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "exam_proctoring_events_id": { + "name": "exam_proctoring_events_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "exam_questions": { "name": "exam_questions", "columns": { @@ -2516,6 +3769,53 @@ "notNull": false, "autoincrement": false }, + "exam_mode": { + "name": "exam_mode", + "type": "enum('homework','timed','proctored')", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'homework'" + }, + "duration_minutes": { + "name": "duration_minutes", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "shuffle_questions": { + "name": "shuffle_questions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "allow_late_start": { + "name": "allow_late_start", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "late_start_grace_minutes": { + "name": "late_start_grace_minutes", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + }, + "anti_cheat_enabled": { + "name": "anti_cheat_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, "status": { "name": "status", "type": "varchar(50)", @@ -2742,6 +4042,505 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "grade_appeals": { + "name": "grade_appeals", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "grade_record_id": { + "name": "grade_record_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "original_score": { + "name": "original_score", + "type": "decimal(6,2)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expected_score": { + "name": "expected_score", + "type": "decimal(6,2)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "appeal_status": { + "name": "appeal_status", + "type": "enum('pending','approved','rejected','withdrawn')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "reviewer_id": { + "name": "reviewer_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "review_comment": { + "name": "review_comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "adjusted_score": { + "name": "adjusted_score", + "type": "decimal(6,2)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reviewed_at": { + "name": "reviewed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "ga_grade_record_idx": { + "name": "ga_grade_record_idx", + "columns": [ + "grade_record_id" + ], + "isUnique": false + }, + "ga_student_idx": { + "name": "ga_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "ga_status_idx": { + "name": "ga_status_idx", + "columns": [ + "appeal_status" + ], + "isUnique": false + }, + "ga_reviewer_idx": { + "name": "ga_reviewer_idx", + "columns": [ + "reviewer_id" + ], + "isUnique": false + }, + "ga_pending_lookup_idx": { + "name": "ga_pending_lookup_idx", + "columns": [ + "grade_record_id", + "appeal_status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "grade_appeals_grade_record_id_grade_records_id_fk": { + "name": "grade_appeals_grade_record_id_grade_records_id_fk", + "tableFrom": "grade_appeals", + "tableTo": "grade_records", + "columnsFrom": [ + "grade_record_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "grade_appeals_student_id_users_id_fk": { + "name": "grade_appeals_student_id_users_id_fk", + "tableFrom": "grade_appeals", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "grade_appeals_reviewer_id_users_id_fk": { + "name": "grade_appeals_reviewer_id_users_id_fk", + "tableFrom": "grade_appeals", + "tableTo": "users", + "columnsFrom": [ + "reviewer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "grade_appeals_id": { + "name": "grade_appeals_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "grade_drafts": { + "name": "grade_drafts", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + }, + "locked_by": { + "name": "locked_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "locked_at": { + "name": "locked_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "lock_token": { + "name": "lock_token", + "type": "varchar(64)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "gd_user_class_subject_type_idx": { + "name": "gd_user_class_subject_type_idx", + "columns": [ + "user_id", + "class_id", + "subject_id", + "type" + ], + "isUnique": true + }, + "gd_user_updated_idx": { + "name": "gd_user_updated_idx", + "columns": [ + "user_id", + "updated_at" + ], + "isUnique": false + }, + "gd_class_subject_lock_idx": { + "name": "gd_class_subject_lock_idx", + "columns": [ + "class_id", + "subject_id", + "type", + "locked_by" + ], + "isUnique": false + } + }, + "foreignKeys": { + "grade_drafts_user_id_users_id_fk": { + "name": "grade_drafts_user_id_users_id_fk", + "tableFrom": "grade_drafts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "grade_drafts_class_id_classes_id_fk": { + "name": "grade_drafts_class_id_classes_id_fk", + "tableFrom": "grade_drafts", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "grade_drafts_subject_id_subjects_id_fk": { + "name": "grade_drafts_subject_id_subjects_id_fk", + "tableFrom": "grade_drafts", + "tableTo": "subjects", + "columnsFrom": [ + "subject_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "grade_drafts_id": { + "name": "grade_drafts_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "grade_record_answers": { + "name": "grade_record_answers", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "grade_record_id": { + "name": "grade_record_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "question_id": { + "name": "question_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "score": { + "name": "score", + "type": "decimal(6,2)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "full_score": { + "name": "full_score", + "type": "decimal(6,2)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "feedback": { + "name": "feedback", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "grade_record_answers_record_idx": { + "name": "grade_record_answers_record_idx", + "columns": [ + "grade_record_id" + ], + "isUnique": false + }, + "grade_record_answers_question_idx": { + "name": "grade_record_answers_question_idx", + "columns": [ + "question_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "grade_record_answers_grade_record_id_grade_records_id_fk": { + "name": "grade_record_answers_grade_record_id_grade_records_id_fk", + "tableFrom": "grade_record_answers", + "tableTo": "grade_records", + "columnsFrom": [ + "grade_record_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "grade_record_answers_question_id_questions_id_fk": { + "name": "grade_record_answers_question_id_questions_id_fk", + "tableFrom": "grade_record_answers", + "tableTo": "questions", + "columnsFrom": [ + "question_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "gra_gr_fk": { + "name": "gra_gr_fk", + "tableFrom": "grade_record_answers", + "tableTo": "grade_records", + "columnsFrom": [ + "grade_record_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "gra_q_fk": { + "name": "gra_q_fk", + "tableFrom": "grade_record_answers", + "tableTo": "questions", + "columnsFrom": [ + "question_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "grade_record_answers_id": { + "name": "grade_record_answers_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "grade_records": { "name": "grade_records", "columns": { @@ -3464,7 +5263,7 @@ "name": "source_exam_id", "type": "varchar(128)", "primaryKey": false, - "notNull": true, + "notNull": false, "autoincrement": false }, "title": { @@ -3757,6 +5556,348 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "invitation_codes": { + "name": "invitation_codes", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "code": { + "name": "code", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "notes": { + "name": "notes", + "type": "varchar(500)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "created_by": { + "name": "created_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "used_by": { + "name": "used_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "used_at": { + "name": "used_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "invitation_codes_code_idx": { + "name": "invitation_codes_code_idx", + "columns": [ + "code" + ], + "isUnique": false + }, + "invitation_codes_email_idx": { + "name": "invitation_codes_email_idx", + "columns": [ + "email" + ], + "isUnique": false + }, + "invitation_codes_used_by_idx": { + "name": "invitation_codes_used_by_idx", + "columns": [ + "used_by" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "invitation_codes_id": { + "name": "invitation_codes_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "invitation_codes_code_unique": { + "name": "invitation_codes_code_unique", + "columns": [ + "code" + ] + } + }, + "checkConstraint": {} + }, + "knowledge_point_mastery": { + "name": "knowledge_point_mastery", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "knowledge_point_id": { + "name": "knowledge_point_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "mastery_level": { + "name": "mastery_level", + "type": "decimal(5,2)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'0'" + }, + "total_questions": { + "name": "total_questions", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "correct_questions": { + "name": "correct_questions", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "last_assessed_at": { + "name": "last_assessed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "mastery_student_idx": { + "name": "mastery_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "mastery_kp_idx": { + "name": "mastery_kp_idx", + "columns": [ + "knowledge_point_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "kpm_student_fk": { + "name": "kpm_student_fk", + "tableFrom": "knowledge_point_mastery", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kpm_kp_fk": { + "name": "kpm_kp_fk", + "tableFrom": "knowledge_point_mastery", + "tableTo": "knowledge_points", + "columnsFrom": [ + "knowledge_point_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "knowledge_point_mastery_id": { + "name": "knowledge_point_mastery_id", + "columns": [ + "id" + ] + }, + "knowledge_point_mastery_student_id_knowledge_point_id_pk": { + "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", + "columns": [ + "student_id", + "knowledge_point_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "knowledge_point_prerequisites": { + "name": "knowledge_point_prerequisites", + "columns": { + "knowledge_point_id": { + "name": "knowledge_point_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "prerequisite_kp_id": { + "name": "prerequisite_kp_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "kp_prereq_kp_idx": { + "name": "kp_prereq_kp_idx", + "columns": [ + "knowledge_point_id" + ], + "isUnique": false + }, + "kp_prereq_prereq_idx": { + "name": "kp_prereq_prereq_idx", + "columns": [ + "prerequisite_kp_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "kp_prereq_kp_fk": { + "name": "kp_prereq_kp_fk", + "tableFrom": "knowledge_point_prerequisites", + "tableTo": "knowledge_points", + "columnsFrom": [ + "knowledge_point_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kp_prereq_prereq_fk": { + "name": "kp_prereq_prereq_fk", + "tableFrom": "knowledge_point_prerequisites", + "tableTo": "knowledge_points", + "columnsFrom": [ + "prerequisite_kp_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "kp_prereq_pk": { + "name": "kp_prereq_pk", + "columns": [ + "knowledge_point_id", + "prerequisite_kp_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "knowledge_points": { "name": "knowledge_points", "columns": { @@ -3864,6 +6005,2108 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "learning_diagnostic_reports": { + "name": "learning_diagnostic_reports", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "generated_by": { + "name": "generated_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "grade_id": { + "name": "grade_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "report_type": { + "name": "report_type", + "type": "enum('individual','class','grade')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'individual'" + }, + "period": { + "name": "period", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "summary": { + "name": "summary", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "strengths": { + "name": "strengths", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "weaknesses": { + "name": "weaknesses", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "recommendations": { + "name": "recommendations", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "overall_score": { + "name": "overall_score", + "type": "decimal(5,2)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "report_status": { + "name": "report_status", + "type": "enum('draft','published','archived')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'draft'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "diagnostic_student_idx": { + "name": "diagnostic_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "diagnostic_generated_by_idx": { + "name": "diagnostic_generated_by_idx", + "columns": [ + "generated_by" + ], + "isUnique": false + }, + "diagnostic_status_idx": { + "name": "diagnostic_status_idx", + "columns": [ + "report_status" + ], + "isUnique": false + }, + "diagnostic_report_type_idx": { + "name": "diagnostic_report_type_idx", + "columns": [ + "report_type" + ], + "isUnique": false + }, + "diagnostic_class_idx": { + "name": "diagnostic_class_idx", + "columns": [ + "class_id" + ], + "isUnique": false + }, + "diagnostic_grade_idx": { + "name": "diagnostic_grade_idx", + "columns": [ + "grade_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "learning_diagnostic_reports_student_id_users_id_fk": { + "name": "learning_diagnostic_reports_student_id_users_id_fk", + "tableFrom": "learning_diagnostic_reports", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "learning_diagnostic_reports_generated_by_users_id_fk": { + "name": "learning_diagnostic_reports_generated_by_users_id_fk", + "tableFrom": "learning_diagnostic_reports", + "tableTo": "users", + "columnsFrom": [ + "generated_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "learning_diagnostic_reports_class_id_classes_id_fk": { + "name": "learning_diagnostic_reports_class_id_classes_id_fk", + "tableFrom": "learning_diagnostic_reports", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "learning_diagnostic_reports_grade_id_grades_id_fk": { + "name": "learning_diagnostic_reports_grade_id_grades_id_fk", + "tableFrom": "learning_diagnostic_reports", + "tableTo": "grades", + "columnsFrom": [ + "grade_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "learning_diagnostic_reports_id": { + "name": "learning_diagnostic_reports_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "leave_requests": { + "name": "leave_requests", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "requester_id": { + "name": "requester_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "leave_type": { + "name": "leave_type", + "type": "enum('sick','personal','family','other')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "start_date": { + "name": "start_date", + "type": "date", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "end_date": { + "name": "end_date", + "type": "date", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "leave_status": { + "name": "leave_status", + "type": "enum('pending','approved','rejected','cancelled')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "reviewer_id": { + "name": "reviewer_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "review_comment": { + "name": "review_comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reviewed_at": { + "name": "reviewed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "attendance_synced": { + "name": "attendance_synced", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "leave_requests_student_idx": { + "name": "leave_requests_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "leave_requests_requester_idx": { + "name": "leave_requests_requester_idx", + "columns": [ + "requester_id" + ], + "isUnique": false + }, + "leave_requests_class_idx": { + "name": "leave_requests_class_idx", + "columns": [ + "class_id" + ], + "isUnique": false + }, + "leave_requests_status_idx": { + "name": "leave_requests_status_idx", + "columns": [ + "leave_status" + ], + "isUnique": false + }, + "leave_requests_reviewer_idx": { + "name": "leave_requests_reviewer_idx", + "columns": [ + "reviewer_id" + ], + "isUnique": false + }, + "leave_requests_class_status_idx": { + "name": "leave_requests_class_status_idx", + "columns": [ + "class_id", + "leave_status" + ], + "isUnique": false + }, + "leave_requests_student_status_idx": { + "name": "leave_requests_student_status_idx", + "columns": [ + "student_id", + "leave_status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "leave_requests_student_id_users_id_fk": { + "name": "leave_requests_student_id_users_id_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "leave_requests_requester_id_users_id_fk": { + "name": "leave_requests_requester_id_users_id_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "requester_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "leave_requests_class_id_classes_id_fk": { + "name": "leave_requests_class_id_classes_id_fk", + "tableFrom": "leave_requests", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "leave_requests_reviewer_id_users_id_fk": { + "name": "leave_requests_reviewer_id_users_id_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "reviewer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "lr_c_fk": { + "name": "lr_c_fk", + "tableFrom": "leave_requests", + "tableTo": "classes", + "columnsFrom": [ + "class_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lr_s_fk": { + "name": "lr_s_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lr_rq_fk": { + "name": "lr_rq_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "requester_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lr_rv_fk": { + "name": "lr_rv_fk", + "tableFrom": "leave_requests", + "tableTo": "users", + "columnsFrom": [ + "reviewer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "leave_requests_id": { + "name": "leave_requests_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_ai_evaluations": { + "name": "lesson_plan_ai_evaluations", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version_no": { + "name": "version_no", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "overall_score": { + "name": "overall_score", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "dimension_scores": { + "name": "dimension_scores", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "suggestions": { + "name": "suggestions", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "recommended_standard_ids": { + "name": "recommended_standard_ids", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "evaluated_by": { + "name": "evaluated_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lpae_plan_version_idx": { + "name": "lpae_plan_version_idx", + "columns": [ + "plan_id", + "version_no" + ], + "isUnique": false + }, + "lpae_plan_idx": { + "name": "lpae_plan_idx", + "columns": [ + "plan_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_ai_evaluations_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_ai_evaluations_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_ai_evaluations", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_ai_evaluations_id": { + "name": "lesson_plan_ai_evaluations_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_analytics_daily": { + "name": "lesson_plan_analytics_daily", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "snapshot_date": { + "name": "snapshot_date", + "type": "date", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "teacher_id": { + "name": "teacher_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "grade_id": { + "name": "grade_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "new_plans_count": { + "name": "new_plans_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "edit_duration_min": { + "name": "edit_duration_min", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "saved_versions_count": { + "name": "saved_versions_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "submitted_count": { + "name": "submitted_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "published_count": { + "name": "published_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "standards_linked": { + "name": "standards_linked", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lpad_date_teacher_idx": { + "name": "lpad_date_teacher_idx", + "columns": [ + "snapshot_date", + "teacher_id" + ], + "isUnique": true + }, + "lpad_date_idx": { + "name": "lpad_date_idx", + "columns": [ + "snapshot_date" + ], + "isUnique": false + }, + "lpad_subject_grade_idx": { + "name": "lpad_subject_grade_idx", + "columns": [ + "subject_id", + "grade_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_analytics_daily_teacher_id_users_id_fk": { + "name": "lesson_plan_analytics_daily_teacher_id_users_id_fk", + "tableFrom": "lesson_plan_analytics_daily", + "tableTo": "users", + "columnsFrom": [ + "teacher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_analytics_daily_id": { + "name": "lesson_plan_analytics_daily_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_attachments": { + "name": "lesson_plan_attachments", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "block_id": { + "name": "block_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "file_id": { + "name": "file_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "display_name": { + "name": "display_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "attachment_type": { + "name": "attachment_type", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'reference'" + }, + "uploaded_by": { + "name": "uploaded_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lpa_plan_idx": { + "name": "lpa_plan_idx", + "columns": [ + "plan_id" + ], + "isUnique": false + }, + "lpa_block_idx": { + "name": "lpa_block_idx", + "columns": [ + "block_id" + ], + "isUnique": false + }, + "lpa_file_idx": { + "name": "lpa_file_idx", + "columns": [ + "file_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_attachments_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_attachments_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_attachments", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_attachments_uploaded_by_users_id_fk": { + "name": "lesson_plan_attachments_uploaded_by_users_id_fk", + "tableFrom": "lesson_plan_attachments", + "tableTo": "users", + "columnsFrom": [ + "uploaded_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_attachments_id": { + "name": "lesson_plan_attachments_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_comments": { + "name": "lesson_plan_comments", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "block_id": { + "name": "block_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "author_id": { + "name": "author_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "resolved": { + "name": "resolved", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "parent_comment_id": { + "name": "parent_comment_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "lpc_plan_block_idx": { + "name": "lpc_plan_block_idx", + "columns": [ + "plan_id", + "block_id" + ], + "isUnique": false + }, + "lpc_author_idx": { + "name": "lpc_author_idx", + "columns": [ + "author_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_comments_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_comments_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_comments", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_comments_author_id_users_id_fk": { + "name": "lesson_plan_comments_author_id_users_id_fk", + "tableFrom": "lesson_plan_comments", + "tableTo": "users", + "columnsFrom": [ + "author_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_comments_id": { + "name": "lesson_plan_comments_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_formative_items": { + "name": "lesson_plan_formative_items", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "block_id": { + "name": "block_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "interaction_type": { + "name": "interaction_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "payload": { + "name": "payload", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "instant_feedback": { + "name": "instant_feedback", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "order_index": { + "name": "order_index", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "lpfi_plan_block_idx": { + "name": "lpfi_plan_block_idx", + "columns": [ + "plan_id", + "block_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_formative_items_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_formative_items_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_formative_items", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_formative_items_id": { + "name": "lesson_plan_formative_items_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_formative_responses": { + "name": "lesson_plan_formative_responses", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "item_id": { + "name": "item_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "class_id": { + "name": "class_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "response": { + "name": "response", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_correct": { + "name": "is_correct", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "duration_sec": { + "name": "duration_sec", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lpfr_item_idx": { + "name": "lpfr_item_idx", + "columns": [ + "item_id" + ], + "isUnique": false + }, + "lpfr_student_idx": { + "name": "lpfr_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "lpfr_class_idx": { + "name": "lpfr_class_idx", + "columns": [ + "class_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_formative_responses_student_id_users_id_fk": { + "name": "lesson_plan_formative_responses_student_id_users_id_fk", + "tableFrom": "lesson_plan_formative_responses", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lpfr_item_fk": { + "name": "lpfr_item_fk", + "tableFrom": "lesson_plan_formative_responses", + "tableTo": "lesson_plan_formative_items", + "columnsFrom": [ + "item_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_formative_responses_id": { + "name": "lesson_plan_formative_responses_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_review_records": { + "name": "lesson_plan_review_records", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reviewer_id": { + "name": "reviewer_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "decision": { + "name": "decision", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "previous_status": { + "name": "previous_status", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "new_status": { + "name": "new_status", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lprr_plan_created_idx": { + "name": "lprr_plan_created_idx", + "columns": [ + "plan_id", + "created_at" + ], + "isUnique": false + }, + "lprr_reviewer_idx": { + "name": "lprr_reviewer_idx", + "columns": [ + "reviewer_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_review_records_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_review_records_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_review_records", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_review_records_reviewer_id_users_id_fk": { + "name": "lesson_plan_review_records_reviewer_id_users_id_fk", + "tableFrom": "lesson_plan_review_records", + "tableTo": "users", + "columnsFrom": [ + "reviewer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_review_records_id": { + "name": "lesson_plan_review_records_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_standards": { + "name": "lesson_plan_standards", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "standard_id": { + "name": "standard_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "relation_type": { + "name": "relation_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'primary'" + }, + "created_by": { + "name": "created_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lps_plan_standard_idx": { + "name": "lps_plan_standard_idx", + "columns": [ + "plan_id", + "standard_id" + ], + "isUnique": true + }, + "lps_standard_idx": { + "name": "lps_standard_idx", + "columns": [ + "standard_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_standards_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_standards_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_standards", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_standards_standard_id_standards_id_fk": { + "name": "lesson_plan_standards_standard_id_standards_id_fk", + "tableFrom": "lesson_plan_standards", + "tableTo": "standards", + "columnsFrom": [ + "standard_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_standards_created_by_users_id_fk": { + "name": "lesson_plan_standards_created_by_users_id_fk", + "tableFrom": "lesson_plan_standards", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_standards_id": { + "name": "lesson_plan_standards_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_substitutes": { + "name": "lesson_plan_substitutes", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "original_teacher_id": { + "name": "original_teacher_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "substitute_teacher_id": { + "name": "substitute_teacher_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "start_date": { + "name": "start_date", + "type": "date", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "end_date": { + "name": "end_date", + "type": "date", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'active'" + }, + "created_by": { + "name": "created_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "lps_plan_idx": { + "name": "lps_plan_idx", + "columns": [ + "plan_id" + ], + "isUnique": false + }, + "lps_original_teacher_idx": { + "name": "lps_original_teacher_idx", + "columns": [ + "original_teacher_id" + ], + "isUnique": false + }, + "lps_substitute_teacher_idx": { + "name": "lps_substitute_teacher_idx", + "columns": [ + "substitute_teacher_id" + ], + "isUnique": false + }, + "lps_date_range_idx": { + "name": "lps_date_range_idx", + "columns": [ + "start_date", + "end_date" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_substitutes_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_substitutes_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_substitutes", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_substitutes_original_teacher_id_users_id_fk": { + "name": "lesson_plan_substitutes_original_teacher_id_users_id_fk", + "tableFrom": "lesson_plan_substitutes", + "tableTo": "users", + "columnsFrom": [ + "original_teacher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plan_substitutes_substitute_teacher_id_users_id_fk": { + "name": "lesson_plan_substitutes_substitute_teacher_id_users_id_fk", + "tableFrom": "lesson_plan_substitutes", + "tableTo": "users", + "columnsFrom": [ + "substitute_teacher_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plan_substitutes_created_by_users_id_fk": { + "name": "lesson_plan_substitutes_created_by_users_id_fk", + "tableFrom": "lesson_plan_substitutes", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_substitutes_id": { + "name": "lesson_plan_substitutes_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_templates": { + "name": "lesson_plan_templates", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "scope": { + "name": "scope", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "blocks": { + "name": "blocks", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "creator_id": { + "name": "creator_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "lpt_type_creator_idx": { + "name": "lpt_type_creator_idx", + "columns": [ + "type", + "creator_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_templates_creator_id_users_id_fk": { + "name": "lesson_plan_templates_creator_id_users_id_fk", + "tableFrom": "lesson_plan_templates", + "tableTo": "users", + "columnsFrom": [ + "creator_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_templates_id": { + "name": "lesson_plan_templates_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plan_versions": { + "name": "lesson_plan_versions", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "plan_id": { + "name": "plan_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version_no": { + "name": "version_no", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "label": { + "name": "label", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_auto": { + "name": "is_auto", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "creator_id": { + "name": "creator_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "lpv_plan_version_idx": { + "name": "lpv_plan_version_idx", + "columns": [ + "plan_id", + "version_no" + ], + "isUnique": false + }, + "lpv_plan_created_idx": { + "name": "lpv_plan_created_idx", + "columns": [ + "plan_id", + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plan_versions_plan_id_lesson_plans_id_fk": { + "name": "lesson_plan_versions_plan_id_lesson_plans_id_fk", + "tableFrom": "lesson_plan_versions", + "tableTo": "lesson_plans", + "columnsFrom": [ + "plan_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "lesson_plan_versions_creator_id_users_id_fk": { + "name": "lesson_plan_versions_creator_id_users_id_fk", + "tableFrom": "lesson_plan_versions", + "tableTo": "users", + "columnsFrom": [ + "creator_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plan_versions_id": { + "name": "lesson_plan_versions_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "lesson_plans": { + "name": "lesson_plans", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "textbook_id": { + "name": "textbook_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chapter_id": { + "name": "chapter_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "course_plan_item_id": { + "name": "course_plan_item_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "grade_id": { + "name": "grade_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "template_id": { + "name": "template_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "template_name": { + "name": "template_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'draft'" + }, + "creator_id": { + "name": "creator_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_saved_at": { + "name": "last_saved_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "lp_creator_idx": { + "name": "lp_creator_idx", + "columns": [ + "creator_id" + ], + "isUnique": false + }, + "lp_status_idx": { + "name": "lp_status_idx", + "columns": [ + "status" + ], + "isUnique": false + }, + "lp_textbook_chapter_idx": { + "name": "lp_textbook_chapter_idx", + "columns": [ + "textbook_id", + "chapter_id" + ], + "isUnique": false + }, + "lp_subject_grade_idx": { + "name": "lp_subject_grade_idx", + "columns": [ + "subject_id", + "grade_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "lesson_plans_textbook_id_textbooks_id_fk": { + "name": "lesson_plans_textbook_id_textbooks_id_fk", + "tableFrom": "lesson_plans", + "tableTo": "textbooks", + "columnsFrom": [ + "textbook_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plans_chapter_id_chapters_id_fk": { + "name": "lesson_plans_chapter_id_chapters_id_fk", + "tableFrom": "lesson_plans", + "tableTo": "chapters", + "columnsFrom": [ + "chapter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plans_subject_id_subjects_id_fk": { + "name": "lesson_plans_subject_id_subjects_id_fk", + "tableFrom": "lesson_plans", + "tableTo": "subjects", + "columnsFrom": [ + "subject_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plans_grade_id_grades_id_fk": { + "name": "lesson_plans_grade_id_grades_id_fk", + "tableFrom": "lesson_plans", + "tableTo": "grades", + "columnsFrom": [ + "grade_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "lesson_plans_creator_id_users_id_fk": { + "name": "lesson_plans_creator_id_users_id_fk", + "tableFrom": "lesson_plans", + "tableTo": "users", + "columnsFrom": [ + "creator_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "lesson_plans_id": { + "name": "lesson_plans_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "login_logs": { "name": "login_logs", "columns": { @@ -3982,6 +8225,148 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "message_drafts": { + "name": "message_drafts", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "receiver_id": { + "name": "receiver_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subject": { + "name": "subject", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "parent_message_id": { + "name": "parent_message_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "device_id": { + "name": "device_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "version": { + "name": "version", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "message_drafts_user_idx": { + "name": "message_drafts_user_idx", + "columns": [ + "user_id" + ], + "isUnique": false + }, + "message_drafts_user_updated_idx": { + "name": "message_drafts_user_updated_idx", + "columns": [ + "user_id", + "updated_at" + ], + "isUnique": false + }, + "message_drafts_user_parent_idx": { + "name": "message_drafts_user_parent_idx", + "columns": [ + "user_id", + "parent_message_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "message_drafts_user_id_users_id_fk": { + "name": "message_drafts_user_id_users_id_fk", + "tableFrom": "message_drafts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "message_drafts_receiver_id_users_id_fk": { + "name": "message_drafts_receiver_id_users_id_fk", + "tableFrom": "message_drafts", + "tableTo": "users", + "columnsFrom": [ + "receiver_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "message_drafts_id": { + "name": "message_drafts_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "message_notifications": { "name": "message_notifications", "columns": { @@ -4035,6 +8420,22 @@ "autoincrement": false, "default": false }, + "priority": { + "name": "priority", + "type": "varchar(16)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'normal'" + }, + "is_archived": { + "name": "is_archived", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -4073,6 +8474,21 @@ "created_at" ], "isUnique": false + }, + "message_notifications_priority_idx": { + "name": "message_notifications_priority_idx", + "columns": [ + "priority" + ], + "isUnique": false + }, + "message_notifications_user_archived_idx": { + "name": "message_notifications_user_archived_idx", + "columns": [ + "user_id", + "is_archived" + ], + "isUnique": false } }, "foreignKeys": { @@ -4101,6 +8517,259 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "message_reports": { + "name": "message_reports", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reporter_id": { + "name": "reporter_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message_id": { + "name": "message_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reported_user_id": { + "name": "reported_user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "message_reports_reporter_idx": { + "name": "message_reports_reporter_idx", + "columns": [ + "reporter_id" + ], + "isUnique": false + }, + "message_reports_message_idx": { + "name": "message_reports_message_idx", + "columns": [ + "message_id" + ], + "isUnique": false + }, + "message_reports_reported_user_idx": { + "name": "message_reports_reported_user_idx", + "columns": [ + "reported_user_id" + ], + "isUnique": false + }, + "message_reports_status_idx": { + "name": "message_reports_status_idx", + "columns": [ + "status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "message_reports_reporter_id_users_id_fk": { + "name": "message_reports_reporter_id_users_id_fk", + "tableFrom": "message_reports", + "tableTo": "users", + "columnsFrom": [ + "reporter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "message_reports_message_id_messages_id_fk": { + "name": "message_reports_message_id_messages_id_fk", + "tableFrom": "message_reports", + "tableTo": "messages", + "columnsFrom": [ + "message_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "message_reports_reported_user_id_users_id_fk": { + "name": "message_reports_reported_user_id_users_id_fk", + "tableFrom": "message_reports", + "tableTo": "users", + "columnsFrom": [ + "reported_user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "message_reports_id": { + "name": "message_reports_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "message_templates": { + "name": "message_templates", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "sort_order": { + "name": "sort_order", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "message_templates_user_idx": { + "name": "message_templates_user_idx", + "columns": [ + "user_id" + ], + "isUnique": false + }, + "message_templates_user_sort_idx": { + "name": "message_templates_user_sort_idx", + "columns": [ + "user_id", + "sort_order" + ], + "isUnique": false + } + }, + "foreignKeys": { + "message_templates_user_id_users_id_fk": { + "name": "message_templates_user_id_users_id_fk", + "tableFrom": "message_templates", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "message_templates_id": { + "name": "message_templates_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "messages": { "name": "messages", "columns": { @@ -4161,6 +8830,42 @@ "notNull": false, "autoincrement": false }, + "sender_deleted_at": { + "name": "sender_deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "receiver_deleted_at": { + "name": "receiver_deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "is_starred": { + "name": "is_starred", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "recalled_at": { + "name": "recalled_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "group_message_id": { + "name": "group_message_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -4206,6 +8911,21 @@ "is_read" ], "isUnique": false + }, + "messages_receiver_starred_idx": { + "name": "messages_receiver_starred_idx", + "columns": [ + "receiver_id", + "is_starred" + ], + "isUnique": false + }, + "messages_group_message_idx": { + "name": "messages_group_message_idx", + "columns": [ + "group_message_id" + ], + "isUnique": false } }, "foreignKeys": { @@ -4247,6 +8967,123 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "notification_logs": { + "name": "notification_logs", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "channel": { + "name": "channel", + "type": "varchar(32)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "varchar(16)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message_id": { + "name": "message_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "error": { + "name": "error", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "notification_logs_user_idx": { + "name": "notification_logs_user_idx", + "columns": [ + "user_id" + ], + "isUnique": false + }, + "notification_logs_channel_idx": { + "name": "notification_logs_channel_idx", + "columns": [ + "channel" + ], + "isUnique": false + }, + "notification_logs_status_idx": { + "name": "notification_logs_status_idx", + "columns": [ + "status" + ], + "isUnique": false + }, + "notification_logs_sent_at_idx": { + "name": "notification_logs_sent_at_idx", + "columns": [ + "sent_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "notification_logs_user_id_users_id_fk": { + "name": "notification_logs_user_id_users_id_fk", + "tableFrom": "notification_logs", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "notification_logs_id": { + "name": "notification_logs_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "notification_preferences": { "name": "notification_preferences", "columns": { @@ -4328,6 +9165,28 @@ "autoincrement": false, "default": true }, + "quiet_hours_enabled": { + "name": "quiet_hours_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "quiet_hours_start": { + "name": "quiet_hours_start", + "type": "varchar(5)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "quiet_hours_end": { + "name": "quiet_hours_end", + "type": "varchar(5)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -4650,6 +9509,357 @@ }, "checkConstraint": {} }, + "practice_answers": { + "name": "practice_answers", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "question_id": { + "name": "question_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "variant_content": { + "name": "variant_content", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "is_variant": { + "name": "is_variant", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "order_index": { + "name": "order_index", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "practice_answer_status": { + "name": "practice_answer_status", + "type": "enum('pending','answered','skipped')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "student_answer": { + "name": "student_answer", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "is_correct": { + "name": "is_correct", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "score": { + "name": "score", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "max_score": { + "name": "max_score", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + }, + "answered_at": { + "name": "answered_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "pa_session_idx": { + "name": "pa_session_idx", + "columns": [ + "session_id" + ], + "isUnique": false + }, + "pa_student_idx": { + "name": "pa_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "pa_question_idx": { + "name": "pa_question_idx", + "columns": [ + "question_id" + ], + "isUnique": false + }, + "pa_session_order_idx": { + "name": "pa_session_order_idx", + "columns": [ + "session_id", + "order_index" + ], + "isUnique": false + } + }, + "foreignKeys": { + "practice_answers_session_id_practice_sessions_id_fk": { + "name": "practice_answers_session_id_practice_sessions_id_fk", + "tableFrom": "practice_answers", + "tableTo": "practice_sessions", + "columnsFrom": [ + "session_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "practice_answers_student_id_users_id_fk": { + "name": "practice_answers_student_id_users_id_fk", + "tableFrom": "practice_answers", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "practice_answers_question_id_questions_id_fk": { + "name": "practice_answers_question_id_questions_id_fk", + "tableFrom": "practice_answers", + "tableTo": "questions", + "columnsFrom": [ + "question_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "practice_answers_id": { + "name": "practice_answers_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, + "practice_sessions": { + "name": "practice_sessions", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "student_id": { + "name": "student_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "practice_type": { + "name": "practice_type", + "type": "enum('error_variant','knowledge_point','weak_chapter','ai_recommended')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_meta": { + "name": "source_meta", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "practice_status": { + "name": "practice_status", + "type": "enum('in_progress','completed','abandoned')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'in_progress'" + }, + "total_questions": { + "name": "total_questions", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "answered_questions": { + "name": "answered_questions", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "correct_count": { + "name": "correct_count", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "started_at": { + "name": "started_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "ps_student_idx": { + "name": "ps_student_idx", + "columns": [ + "student_id" + ], + "isUnique": false + }, + "ps_student_status_idx": { + "name": "ps_student_status_idx", + "columns": [ + "student_id", + "practice_status" + ], + "isUnique": false + }, + "ps_subject_idx": { + "name": "ps_subject_idx", + "columns": [ + "subject_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "practice_sessions_student_id_users_id_fk": { + "name": "practice_sessions_student_id_users_id_fk", + "tableFrom": "practice_sessions", + "tableTo": "users", + "columnsFrom": [ + "student_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "practice_sessions_id": { + "name": "practice_sessions_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "questions": { "name": "questions", "columns": { @@ -4901,6 +10111,22 @@ "notNull": false, "autoincrement": false }, + "is_system": { + "name": "is_system", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, "created_at": { "name": "created_at", "type": "timestamp", @@ -5357,6 +10583,196 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "standards": { + "name": "standards", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "code": { + "name": "code", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "level": { + "name": "level", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "parent_id": { + "name": "parent_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subject_id": { + "name": "subject_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "grade_id": { + "name": "grade_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stage": { + "name": "stage", + "type": "varchar(20)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sort_order": { + "name": "sort_order", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "is_active": { + "name": "is_active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "created_by": { + "name": "created_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "std_code_idx": { + "name": "std_code_idx", + "columns": [ + "code" + ], + "isUnique": true + }, + "std_parent_idx": { + "name": "std_parent_idx", + "columns": [ + "parent_id" + ], + "isUnique": false + }, + "std_subject_grade_idx": { + "name": "std_subject_grade_idx", + "columns": [ + "subject_id", + "grade_id" + ], + "isUnique": false + }, + "std_level_idx": { + "name": "std_level_idx", + "columns": [ + "level" + ], + "isUnique": false + } + }, + "foreignKeys": { + "standards_subject_id_subjects_id_fk": { + "name": "standards_subject_id_subjects_id_fk", + "tableFrom": "standards", + "tableTo": "subjects", + "columnsFrom": [ + "subject_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "standards_grade_id_grades_id_fk": { + "name": "standards_grade_id_grades_id_fk", + "tableFrom": "standards", + "tableTo": "grades", + "columnsFrom": [ + "grade_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "standards_created_by_users_id_fk": { + "name": "standards_created_by_users_id_fk", + "tableFrom": "standards", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "standards_id": { + "name": "standards_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "subjects": { "name": "subjects", "columns": { @@ -5552,6 +10968,99 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "system_settings": { + "name": "system_settings", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "category": { + "name": "category", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value_type": { + "name": "value_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'string'" + }, + "updated_by": { + "name": "updated_by", + "type": "varchar(128)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "onUpdate": true, + "default": "(now())" + } + }, + "indexes": { + "ss_category_key_idx": { + "name": "ss_category_key_idx", + "columns": [ + "category", + "key" + ], + "isUnique": true + }, + "ss_category_idx": { + "name": "ss_category_idx", + "columns": [ + "category" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "system_settings_id": { + "name": "system_settings_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "textbooks": { "name": "textbooks", "columns": { @@ -5621,6 +11130,95 @@ "uniqueConstraints": {}, "checkConstraint": {} }, + "user_blocks": { + "name": "user_blocks", + "columns": { + "id": { + "name": "id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "blocker_id": { + "name": "blocker_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "blocked_id": { + "name": "blocked_id", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(now())" + } + }, + "indexes": { + "user_blocks_blocker_blocked_uniq": { + "name": "user_blocks_blocker_blocked_uniq", + "columns": [ + "blocker_id", + "blocked_id" + ], + "isUnique": true + }, + "user_blocks_blocker_idx": { + "name": "user_blocks_blocker_idx", + "columns": [ + "blocker_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "user_blocks_blocker_id_users_id_fk": { + "name": "user_blocks_blocker_id_users_id_fk", + "tableFrom": "user_blocks", + "tableTo": "users", + "columnsFrom": [ + "blocker_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_blocks_blocked_id_users_id_fk": { + "name": "user_blocks_blocked_id_users_id_fk", + "tableFrom": "user_blocks", + "tableTo": "users", + "columnsFrom": [ + "blocked_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "user_blocks_id": { + "name": "user_blocks_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraint": {} + }, "users": { "name": "users", "columns": { diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json deleted file mode 100644 index 27c8a70..0000000 --- a/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,6809 +0,0 @@ -{ - "version": "5", - "dialect": "mysql", - "id": "ce4890dc-330e-4599-b6df-b659f40e63f8", - "prevId": "0ec4760a-6847-43de-8c01-13cb9676df8c", - "tables": { - "academic_years": { - "name": "academic_years", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_active": { - "name": "is_active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "academic_years_name_idx": { - "name": "academic_years_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "academic_years_active_idx": { - "name": "academic_years_active_idx", - "columns": [ - "is_active" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "academic_years_id": { - "name": "academic_years_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "academic_years_name_unique": { - "name": "academic_years_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "accounts": { - "name": "accounts", - "columns": { - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "accounts_userId_users_id_fk": { - "name": "accounts_userId_users_id_fk", - "tableFrom": "accounts", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "accounts_provider_providerAccountId_pk": { - "name": "accounts_provider_providerAccountId_pk", - "columns": [ - "provider", - "providerAccountId" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "ai_providers": { - "name": "ai_providers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "base_url": { - "name": "base_url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_encrypted": { - "name": "api_key_encrypted", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_last4": { - "name": "api_key_last4", - "type": "varchar(4)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ai_provider_idx": { - "name": "ai_provider_idx", - "columns": [ - "provider" - ], - "isUnique": false - }, - "ai_provider_default_idx": { - "name": "ai_provider_default_idx", - "columns": [ - "is_default" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "ai_providers_id": { - "name": "ai_providers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "announcements": { - "name": "announcements", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('school','grade','class')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'school'" - }, - "status": { - "name": "status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "target_grade_id": { - "name": "target_grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_class_id": { - "name": "target_class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "published_at": { - "name": "published_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "announcements_author_idx": { - "name": "announcements_author_idx", - "columns": [ - "author_id" - ], - "isUnique": false - }, - "announcements_status_idx": { - "name": "announcements_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "announcements_type_idx": { - "name": "announcements_type_idx", - "columns": [ - "type" - ], - "isUnique": false - }, - "announcements_target_grade_idx": { - "name": "announcements_target_grade_idx", - "columns": [ - "target_grade_id" - ], - "isUnique": false - }, - "announcements_target_class_idx": { - "name": "announcements_target_class_idx", - "columns": [ - "target_class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "announcements_author_id_users_id_fk": { - "name": "announcements_author_id_users_id_fk", - "tableFrom": "announcements", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "announcements_id": { - "name": "announcements_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_records": { - "name": "attendance_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "schedule_id": { - "name": "schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_records_student_idx": { - "name": "attendance_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "attendance_records_class_idx": { - "name": "attendance_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "attendance_records_date_idx": { - "name": "attendance_records_date_idx", - "columns": [ - "date" - ], - "isUnique": false - }, - "attendance_records_class_date_idx": { - "name": "attendance_records_class_date_idx", - "columns": [ - "class_id", - "date" - ], - "isUnique": false - }, - "attendance_records_student_date_idx": { - "name": "attendance_records_student_date_idx", - "columns": [ - "student_id", - "date" - ], - "isUnique": false - }, - "attendance_records_schedule_idx": { - "name": "attendance_records_schedule_idx", - "columns": [ - "schedule_id" - ], - "isUnique": false - }, - "attendance_records_recorded_by_idx": { - "name": "attendance_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_records_student_id_users_id_fk": { - "name": "attendance_records_student_id_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_class_id_classes_id_fk": { - "name": "attendance_records_class_id_classes_id_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_recorded_by_users_id_fk": { - "name": "attendance_records_recorded_by_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_c_fk": { - "name": "ar_c_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_s_fk": { - "name": "ar_s_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_rb_fk": { - "name": "ar_rb_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_records_id": { - "name": "attendance_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_rules": { - "name": "attendance_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "late_threshold_minutes": { - "name": "late_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "early_leave_threshold_minutes": { - "name": "early_leave_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "enable_auto_mark": { - "name": "enable_auto_mark", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_rules_class_idx": { - "name": "attendance_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_rules_class_id_classes_id_fk": { - "name": "attendance_rules_class_id_classes_id_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "atr_c_fk": { - "name": "atr_c_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_rules_id": { - "name": "attendance_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "audit_logs": { - "name": "audit_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_name": { - "name": "user_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "module": { - "name": "module", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "detail": { - "name": "detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "audit_logs_user_id_idx": { - "name": "audit_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "audit_logs_module_idx": { - "name": "audit_logs_module_idx", - "columns": [ - "module" - ], - "isUnique": false - }, - "audit_logs_action_idx": { - "name": "audit_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "audit_logs_status_idx": { - "name": "audit_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "audit_logs_created_at_idx": { - "name": "audit_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "audit_logs_id": { - "name": "audit_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "chapters": { - "name": "chapters", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "textbook_idx": { - "name": "textbook_idx", - "columns": [ - "textbook_id" - ], - "isUnique": false - }, - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "chapters_textbook_id_textbooks_id_fk": { - "name": "chapters_textbook_id_textbooks_id_fk", - "tableFrom": "chapters", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "chapters_id": { - "name": "chapters_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_enrollments": { - "name": "class_enrollments", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_enrollment_status": { - "name": "class_enrollment_status", - "type": "enum('active','inactive')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "class_enrollments_class_idx": { - "name": "class_enrollments_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_enrollments_student_idx": { - "name": "class_enrollments_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "ce_c_fk": { - "name": "ce_c_fk", - "tableFrom": "class_enrollments", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ce_s_fk": { - "name": "ce_s_fk", - "tableFrom": "class_enrollments", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_enrollments_class_id_student_id_pk": { - "name": "class_enrollments_class_id_student_id_pk", - "columns": [ - "class_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_schedule": { - "name": "class_schedule", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "weekday": { - "name": "weekday", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course": { - "name": "course", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "location": { - "name": "location", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_schedule_class_idx": { - "name": "class_schedule_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_schedule_class_day_idx": { - "name": "class_schedule_class_day_idx", - "columns": [ - "class_id", - "weekday" - ], - "isUnique": false - } - }, - "foreignKeys": { - "cs_c_fk": { - "name": "cs_c_fk", - "tableFrom": "class_schedule", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_schedule_id": { - "name": "class_schedule_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_subject_teachers": { - "name": "class_subject_teachers", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_subject_teachers_class_idx": { - "name": "class_subject_teachers_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_subject_teachers_teacher_idx": { - "name": "class_subject_teachers_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "class_subject_teachers_subject_id_idx": { - "name": "class_subject_teachers_subject_id_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_subject_teachers_teacher_id_users_id_fk": { - "name": "class_subject_teachers_teacher_id_users_id_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "cst_c_fk": { - "name": "cst_c_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cst_s_fk": { - "name": "cst_s_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_subject_teachers_class_id_subject_id_pk": { - "name": "class_subject_teachers_class_id_subject_id_pk", - "columns": [ - "class_id", - "subject_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "classes": { - "name": "classes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_name": { - "name": "school_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "homeroom": { - "name": "homeroom", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "room": { - "name": "room", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "invitation_code": { - "name": "invitation_code", - "type": "varchar(6)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classes_teacher_idx": { - "name": "classes_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "classes_grade_idx": { - "name": "classes_grade_idx", - "columns": [ - "grade" - ], - "isUnique": false - }, - "classes_school_idx": { - "name": "classes_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "classes_grade_id_idx": { - "name": "classes_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "classes_teacher_id_users_id_fk": { - "name": "classes_teacher_id_users_id_fk", - "tableFrom": "classes", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "c_s_fk": { - "name": "c_s_fk", - "tableFrom": "classes", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "c_g_fk": { - "name": "c_g_fk", - "tableFrom": "classes", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "classes_id": { - "name": "classes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classes_invitation_code_unique": { - "name": "classes_invitation_code_unique", - "columns": [ - "invitation_code" - ] - } - }, - "checkConstraint": {} - }, - "classrooms": { - "name": "classrooms", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "building": { - "name": "building", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "floor": { - "name": "floor", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classrooms_name_idx": { - "name": "classrooms_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "classrooms_id": { - "name": "classrooms_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classrooms_name_unique": { - "name": "classrooms_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "course_plan_items": { - "name": "course_plan_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "week": { - "name": "week", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hours": { - "name": "hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "textbook_chapter": { - "name": "textbook_chapter", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "notes": { - "name": "notes", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_completed": { - "name": "is_completed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "completed_at": { - "name": "completed_at", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plan_items_plan_idx": { - "name": "course_plan_items_plan_idx", - "columns": [ - "plan_id" - ], - "isUnique": false - }, - "course_plan_items_plan_week_idx": { - "name": "course_plan_items_plan_week_idx", - "columns": [ - "plan_id", - "week" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plan_items_plan_id_course_plans_id_fk": { - "name": "course_plan_items_plan_id_course_plans_id_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cpi_p_fk": { - "name": "cpi_p_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plan_items_id": { - "name": "course_plan_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_plans": { - "name": "course_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "total_hours": { - "name": "total_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "completed_hours": { - "name": "completed_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "weekly_hours": { - "name": "weekly_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "syllabus": { - "name": "syllabus", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "objectives": { - "name": "objectives", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('planning','active','completed','paused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'planning'" - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plans_class_idx": { - "name": "course_plans_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "course_plans_teacher_idx": { - "name": "course_plans_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "course_plans_subject_idx": { - "name": "course_plans_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "course_plans_status_idx": { - "name": "course_plans_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "course_plans_class_subject_idx": { - "name": "course_plans_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plans_class_id_classes_id_fk": { - "name": "course_plans_class_id_classes_id_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_subject_id_subjects_id_fk": { - "name": "course_plans_subject_id_subjects_id_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_teacher_id_users_id_fk": { - "name": "course_plans_teacher_id_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_created_by_users_id_fk": { - "name": "course_plans_created_by_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_c_fk": { - "name": "cp_c_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_s_fk": { - "name": "cp_s_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_t_fk": { - "name": "cp_t_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_cb_fk": { - "name": "cp_cb_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plans_id": { - "name": "course_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_selections": { - "name": "course_selections", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course_id": { - "name": "course_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "selection_status": { - "name": "selection_status", - "type": "enum('selected','enrolled','waitlist','dropped','rejected')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'selected'" - }, - "priority": { - "name": "priority", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "selected_at": { - "name": "selected_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "enrolled_at": { - "name": "enrolled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dropped_at": { - "name": "dropped_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "lottery_rank": { - "name": "lottery_rank", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_selections_course_idx": { - "name": "course_selections_course_idx", - "columns": [ - "course_id" - ], - "isUnique": false - }, - "course_selections_student_idx": { - "name": "course_selections_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "course_selections_status_idx": { - "name": "course_selections_status_idx", - "columns": [ - "selection_status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_selections_course_id_elective_courses_id_fk": { - "name": "course_selections_course_id_elective_courses_id_fk", - "tableFrom": "course_selections", - "tableTo": "elective_courses", - "columnsFrom": [ - "course_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_selections_student_id_users_id_fk": { - "name": "course_selections_student_id_users_id_fk", - "tableFrom": "course_selections", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_selections_id": { - "name": "course_selections_id", - "columns": [ - "id" - ] - }, - "course_selections_course_id_student_id_pk": { - "name": "course_selections_course_id_student_id_pk", - "columns": [ - "course_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "data_change_logs": { - "name": "data_change_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "table_name": { - "name": "table_name", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "record_id": { - "name": "record_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('create','update','delete')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "old_value": { - "name": "old_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_value": { - "name": "new_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "changed_by": { - "name": "changed_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "changed_by_name": { - "name": "changed_by_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "data_change_logs_table_name_idx": { - "name": "data_change_logs_table_name_idx", - "columns": [ - "table_name" - ], - "isUnique": false - }, - "data_change_logs_record_id_idx": { - "name": "data_change_logs_record_id_idx", - "columns": [ - "record_id" - ], - "isUnique": false - }, - "data_change_logs_action_idx": { - "name": "data_change_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "data_change_logs_changed_by_idx": { - "name": "data_change_logs_changed_by_idx", - "columns": [ - "changed_by" - ], - "isUnique": false - }, - "data_change_logs_created_at_idx": { - "name": "data_change_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "data_change_logs_id": { - "name": "data_change_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "departments": { - "name": "departments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "departments_name_idx": { - "name": "departments_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "departments_id": { - "name": "departments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "departments_name_unique": { - "name": "departments_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "elective_courses": { - "name": "elective_courses", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "enrolled_count": { - "name": "enrolled_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "classroom": { - "name": "classroom", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "schedule": { - "name": "schedule", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_start_at": { - "name": "selection_start_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_end_at": { - "name": "selection_end_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('draft','open','closed','cancelled')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "selection_mode": { - "name": "selection_mode", - "type": "enum('fcfs','lottery')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'fcfs'" - }, - "credit": { - "name": "credit", - "type": "decimal(3,1)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'1.0'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "elective_courses_teacher_idx": { - "name": "elective_courses_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "elective_courses_subject_idx": { - "name": "elective_courses_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "elective_courses_grade_idx": { - "name": "elective_courses_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "elective_courses_status_idx": { - "name": "elective_courses_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "elective_courses_subject_id_subjects_id_fk": { - "name": "elective_courses_subject_id_subjects_id_fk", - "tableFrom": "elective_courses", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "elective_courses_teacher_id_users_id_fk": { - "name": "elective_courses_teacher_id_users_id_fk", - "tableFrom": "elective_courses", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "elective_courses_grade_id_grades_id_fk": { - "name": "elective_courses_grade_id_grades_id_fk", - "tableFrom": "elective_courses", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "elective_courses_id": { - "name": "elective_courses_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_proctoring_events": { - "name": "exam_proctoring_events", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_type": { - "name": "event_type", - "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_detail": { - "name": "event_detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "occurred_at": { - "name": "occurred_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "proctoring_submission_idx": { - "name": "proctoring_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "proctoring_student_idx": { - "name": "proctoring_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "proctoring_exam_idx": { - "name": "proctoring_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "proctoring_event_type_idx": { - "name": "proctoring_event_type_idx", - "columns": [ - "event_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_proctoring_events_submission_id_exam_submissions_id_fk": { - "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_student_id_users_id_fk": { - "name": "exam_proctoring_events_student_id_users_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_exam_id_exams_id_fk": { - "name": "exam_proctoring_events_exam_id_exams_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_proctoring_events_id": { - "name": "exam_proctoring_events_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_questions": { - "name": "exam_questions", - "columns": { - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "exam_questions_exam_id_exams_id_fk": { - "name": "exam_questions_exam_id_exams_id_fk", - "tableFrom": "exam_questions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_questions_question_id_questions_id_fk": { - "name": "exam_questions_question_id_questions_id_fk", - "tableFrom": "exam_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_questions_exam_id_question_id_pk": { - "name": "exam_questions_exam_id_question_id_pk", - "columns": [ - "exam_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_submissions": { - "name": "exam_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exam_student_idx": { - "name": "exam_student_idx", - "columns": [ - "exam_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_submissions_exam_id_exams_id_fk": { - "name": "exam_submissions_exam_id_exams_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_submissions_student_id_users_id_fk": { - "name": "exam_submissions_student_id_users_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_submissions_id": { - "name": "exam_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exams": { - "name": "exams", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "exam_mode": { - "name": "exam_mode", - "type": "enum('homework','timed','proctored')", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'homework'" - }, - "duration_minutes": { - "name": "duration_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "shuffle_questions": { - "name": "shuffle_questions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "allow_late_start": { - "name": "allow_late_start", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "late_start_grace_minutes": { - "name": "late_start_grace_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "anti_cheat_enabled": { - "name": "anti_cheat_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exams_subject_idx": { - "name": "exams_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "exams_grade_idx": { - "name": "exams_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exams_creator_id_users_id_fk": { - "name": "exams_creator_id_users_id_fk", - "tableFrom": "exams", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_subject_id_subjects_id_fk": { - "name": "exams_subject_id_subjects_id_fk", - "tableFrom": "exams", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_grade_id_grades_id_fk": { - "name": "exams_grade_id_grades_id_fk", - "tableFrom": "exams", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exams_id": { - "name": "exams_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "file_attachments": { - "name": "file_attachments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "bigint", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "storage_path": { - "name": "storage_path", - "type": "varchar(512)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "file_attachments_uploader_idx": { - "name": "file_attachments_uploader_idx", - "columns": [ - "uploader_id" - ], - "isUnique": false - }, - "file_attachments_target_idx": { - "name": "file_attachments_target_idx", - "columns": [ - "target_type", - "target_id" - ], - "isUnique": false - }, - "file_attachments_created_at_idx": { - "name": "file_attachments_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "file_attachments_uploader_id_users_id_fk": { - "name": "file_attachments_uploader_id_users_id_fk", - "tableFrom": "file_attachments", - "tableTo": "users", - "columnsFrom": [ - "uploader_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "file_attachments_id": { - "name": "file_attachments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grade_records": { - "name": "grade_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "full_score": { - "name": "full_score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'100'" - }, - "type": { - "name": "type", - "type": "enum('exam','quiz','homework','other')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'exam'" - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grade_records_student_idx": { - "name": "grade_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "grade_records_class_idx": { - "name": "grade_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "grade_records_subject_idx": { - "name": "grade_records_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "grade_records_exam_idx": { - "name": "grade_records_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "grade_records_class_subject_idx": { - "name": "grade_records_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - }, - "grade_records_recorded_by_idx": { - "name": "grade_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "grade_records_student_id_users_id_fk": { - "name": "grade_records_student_id_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_class_id_classes_id_fk": { - "name": "grade_records_class_id_classes_id_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_subject_id_subjects_id_fk": { - "name": "grade_records_subject_id_subjects_id_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_recorded_by_users_id_fk": { - "name": "grade_records_recorded_by_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_c_fk": { - "name": "gr_c_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_s_fk": { - "name": "gr_s_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_sub_fk": { - "name": "gr_sub_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_rb_fk": { - "name": "gr_rb_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grade_records_id": { - "name": "grade_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grades": { - "name": "grades", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "grade_head_id": { - "name": "grade_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teaching_head_id": { - "name": "teaching_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grades_school_idx": { - "name": "grades_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "grades_school_name_uniq": { - "name": "grades_school_name_uniq", - "columns": [ - "school_id", - "name" - ], - "isUnique": false - }, - "grades_grade_head_idx": { - "name": "grades_grade_head_idx", - "columns": [ - "grade_head_id" - ], - "isUnique": false - }, - "grades_teaching_head_idx": { - "name": "grades_teaching_head_idx", - "columns": [ - "teaching_head_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "g_s_fk": { - "name": "g_s_fk", - "tableFrom": "grades", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "g_gh_fk": { - "name": "g_gh_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "grade_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "g_th_fk": { - "name": "g_th_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "teaching_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grades_id": { - "name": "grades_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_answers": { - "name": "homework_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_answer_submission_idx": { - "name": "hw_answer_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "hw_answer_submission_question_idx": { - "name": "hw_answer_submission_question_idx", - "columns": [ - "submission_id", - "question_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_ans_sub_fk": { - "name": "hw_ans_sub_fk", - "tableFrom": "homework_answers", - "tableTo": "homework_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_ans_q_fk": { - "name": "hw_ans_q_fk", - "tableFrom": "homework_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_answers_id": { - "name": "homework_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_questions": { - "name": "homework_assignment_questions", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "hw_assignment_questions_assignment_idx": { - "name": "hw_assignment_questions_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_aq_a_fk": { - "name": "hw_aq_a_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_aq_q_fk": { - "name": "hw_aq_q_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_questions_assignment_id_question_id_pk": { - "name": "homework_assignment_questions_assignment_id_question_id_pk", - "columns": [ - "assignment_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_targets": { - "name": "homework_assignment_targets", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_targets_assignment_idx": { - "name": "hw_assignment_targets_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - }, - "hw_assignment_targets_student_idx": { - "name": "hw_assignment_targets_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_at_a_fk": { - "name": "hw_at_a_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_at_s_fk": { - "name": "hw_at_s_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_targets_assignment_id_student_id_pk": { - "name": "homework_assignment_targets_assignment_id_student_id_pk", - "columns": [ - "assignment_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignments": { - "name": "homework_assignments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_exam_id": { - "name": "source_exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "available_at": { - "name": "available_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "due_at": { - "name": "due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_late": { - "name": "allow_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "late_due_at": { - "name": "late_due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_attempts": { - "name": "max_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_creator_idx": { - "name": "hw_assignment_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "hw_assignment_source_exam_idx": { - "name": "hw_assignment_source_exam_idx", - "columns": [ - "source_exam_id" - ], - "isUnique": false - }, - "hw_assignment_status_idx": { - "name": "hw_assignment_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_asg_exam_fk": { - "name": "hw_asg_exam_fk", - "tableFrom": "homework_assignments", - "tableTo": "exams", - "columnsFrom": [ - "source_exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_asg_creator_fk": { - "name": "hw_asg_creator_fk", - "tableFrom": "homework_assignments", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignments_id": { - "name": "homework_assignments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_submissions": { - "name": "homework_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "attempt_no": { - "name": "attempt_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "started_at": { - "name": "started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_late": { - "name": "is_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_student_idx": { - "name": "hw_assignment_student_idx", - "columns": [ - "assignment_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_sub_a_fk": { - "name": "hw_sub_a_fk", - "tableFrom": "homework_submissions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_sub_student_fk": { - "name": "hw_sub_student_fk", - "tableFrom": "homework_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_submissions_id": { - "name": "homework_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_mastery": { - "name": "knowledge_point_mastery", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mastery_level": { - "name": "mastery_level", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "total_questions": { - "name": "total_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_questions": { - "name": "correct_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_assessed_at": { - "name": "last_assessed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "mastery_student_idx": { - "name": "mastery_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "mastery_kp_idx": { - "name": "mastery_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "knowledge_point_mastery_student_id_users_id_fk": { - "name": "knowledge_point_mastery_student_id_users_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk": { - "name": "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_mastery_id": { - "name": "knowledge_point_mastery_id", - "columns": [ - "id" - ] - }, - "knowledge_point_mastery_student_id_knowledge_point_id_pk": { - "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", - "columns": [ - "student_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_points": { - "name": "knowledge_points", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "anchor_text": { - "name": "anchor_text", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "level": { - "name": "level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "kp_chapter_id_idx": { - "name": "kp_chapter_id_idx", - "columns": [ - "chapter_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "knowledge_points_id": { - "name": "knowledge_points_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "learning_diagnostic_reports": { - "name": "learning_diagnostic_reports", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "generated_by": { - "name": "generated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_type": { - "name": "report_type", - "type": "enum('individual','class','grade')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'individual'" - }, - "period": { - "name": "period", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "summary": { - "name": "summary", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "strengths": { - "name": "strengths", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "weaknesses": { - "name": "weaknesses", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recommendations": { - "name": "recommendations", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "overall_score": { - "name": "overall_score", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_status": { - "name": "report_status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "diagnostic_student_idx": { - "name": "diagnostic_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "diagnostic_generated_by_idx": { - "name": "diagnostic_generated_by_idx", - "columns": [ - "generated_by" - ], - "isUnique": false - }, - "diagnostic_status_idx": { - "name": "diagnostic_status_idx", - "columns": [ - "report_status" - ], - "isUnique": false - }, - "diagnostic_report_type_idx": { - "name": "diagnostic_report_type_idx", - "columns": [ - "report_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "learning_diagnostic_reports_student_id_users_id_fk": { - "name": "learning_diagnostic_reports_student_id_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "learning_diagnostic_reports_generated_by_users_id_fk": { - "name": "learning_diagnostic_reports_generated_by_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "generated_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "learning_diagnostic_reports_id": { - "name": "learning_diagnostic_reports_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "login_logs": { - "name": "login_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_email": { - "name": "user_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('signin','signout','signup')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "login_logs_user_id_idx": { - "name": "login_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "login_logs_user_email_idx": { - "name": "login_logs_user_email_idx", - "columns": [ - "user_email" - ], - "isUnique": false - }, - "login_logs_action_idx": { - "name": "login_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "login_logs_status_idx": { - "name": "login_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "login_logs_created_at_idx": { - "name": "login_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "login_logs_id": { - "name": "login_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "message_notifications": { - "name": "message_notifications", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "link": { - "name": "link", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "message_notifications_user_idx": { - "name": "message_notifications_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "message_notifications_is_read_idx": { - "name": "message_notifications_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "message_notifications_user_read_idx": { - "name": "message_notifications_user_read_idx", - "columns": [ - "user_id", - "is_read" - ], - "isUnique": false - }, - "message_notifications_created_at_idx": { - "name": "message_notifications_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "message_notifications_user_id_users_id_fk": { - "name": "message_notifications_user_id_users_id_fk", - "tableFrom": "message_notifications", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "message_notifications_id": { - "name": "message_notifications_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "sender_id": { - "name": "sender_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "receiver_id": { - "name": "receiver_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "read_at": { - "name": "read_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_message_id": { - "name": "parent_message_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "messages_sender_idx": { - "name": "messages_sender_idx", - "columns": [ - "sender_id" - ], - "isUnique": false - }, - "messages_receiver_idx": { - "name": "messages_receiver_idx", - "columns": [ - "receiver_id" - ], - "isUnique": false - }, - "messages_is_read_idx": { - "name": "messages_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "messages_parent_idx": { - "name": "messages_parent_idx", - "columns": [ - "parent_message_id" - ], - "isUnique": false - }, - "messages_receiver_read_idx": { - "name": "messages_receiver_read_idx", - "columns": [ - "receiver_id", - "is_read" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_sender_id_users_id_fk": { - "name": "messages_sender_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "sender_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_receiver_id_users_id_fk": { - "name": "messages_receiver_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "receiver_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "messages_id": { - "name": "messages_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "notification_preferences": { - "name": "notification_preferences", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_enabled": { - "name": "email_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "sms_enabled": { - "name": "sms_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "push_enabled": { - "name": "push_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "homework_notifications": { - "name": "homework_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "grade_notifications": { - "name": "grade_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "announcement_notifications": { - "name": "announcement_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "message_notifications": { - "name": "message_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "attendance_notifications": { - "name": "attendance_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "notification_preferences_user_idx": { - "name": "notification_preferences_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "notification_preferences_user_id_users_id_fk": { - "name": "notification_preferences_user_id_users_id_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "np_u_fk": { - "name": "np_u_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "notification_preferences_id": { - "name": "notification_preferences_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "notification_preferences_user_id_unique": { - "name": "notification_preferences_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "parent_student_relations": { - "name": "parent_student_relations", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "relation": { - "name": "relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "parent_student_relations_parent_idx": { - "name": "parent_student_relations_parent_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "parent_student_relations_student_idx": { - "name": "parent_student_relations_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "parent_student_relations_parent_id_users_id_fk": { - "name": "parent_student_relations_parent_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parent_student_relations_student_id_users_id_fk": { - "name": "parent_student_relations_student_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_p_fk": { - "name": "psr_p_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_s_fk": { - "name": "psr_s_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "parent_student_relations_id": { - "name": "parent_student_relations_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "password_security": { - "name": "password_security", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "failed_login_attempts": { - "name": "failed_login_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "locked_until": { - "name": "locked_until", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "must_change_password": { - "name": "must_change_password", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "last_password_change": { - "name": "last_password_change", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "password_security_user_idx": { - "name": "password_security_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "password_security_user_id_users_id_fk": { - "name": "password_security_user_id_users_id_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ps_u_fk": { - "name": "ps_u_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "password_security_id": { - "name": "password_security_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "password_security_user_id_unique": { - "name": "password_security_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "questions": { - "name": "questions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('single_choice','multiple_choice','text','judgment','composite')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "difficulty": { - "name": "difficulty", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "author_id_idx": { - "name": "author_id_idx", - "columns": [ - "author_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "questions_author_id_users_id_fk": { - "name": "questions_author_id_users_id_fk", - "tableFrom": "questions", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_id": { - "name": "questions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "questions_to_knowledge_points": { - "name": "questions_to_knowledge_points", - "columns": { - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "kp_idx": { - "name": "kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "q_kp_qid_fk": { - "name": "q_kp_qid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "q_kp_kpid_fk": { - "name": "q_kp_kpid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_to_knowledge_points_question_id_knowledge_point_id_pk": { - "name": "questions_to_knowledge_points_question_id_knowledge_point_id_pk", - "columns": [ - "question_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "role_permissions": { - "name": "role_permissions", - "columns": { - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "permission": { - "name": "permission", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "role_permissions_role_idx": { - "name": "role_permissions_role_idx", - "columns": [ - "role_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "role_permissions_role_id_roles_id_fk": { - "name": "role_permissions_role_id_roles_id_fk", - "tableFrom": "role_permissions", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "role_permissions_role_id_permission_pk": { - "name": "role_permissions_role_id_permission_pk", - "columns": [ - "role_id", - "permission" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "roles_id": { - "name": "roles_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "schedule_changes": { - "name": "schedule_changes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_schedule_id": { - "name": "original_schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_teacher_id": { - "name": "original_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "substitute_teacher_id": { - "name": "substitute_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_date": { - "name": "original_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_date": { - "name": "new_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_start_time": { - "name": "new_start_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_end_time": { - "name": "new_end_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('pending','approved','rejected','completed')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "requested_by": { - "name": "requested_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "approved_by": { - "name": "approved_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schedule_changes_class_idx": { - "name": "schedule_changes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "schedule_changes_status_idx": { - "name": "schedule_changes_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "schedule_changes_requested_by_idx": { - "name": "schedule_changes_requested_by_idx", - "columns": [ - "requested_by" - ], - "isUnique": false - }, - "schedule_changes_original_schedule_idx": { - "name": "schedule_changes_original_schedule_idx", - "columns": [ - "original_schedule_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schedule_changes_id": { - "name": "schedule_changes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "scheduling_rules": { - "name": "scheduling_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_daily_hours": { - "name": "max_daily_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 8 - }, - "max_continuous_hours": { - "name": "max_continuous_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "lunch_break_start": { - "name": "lunch_break_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'12:00'" - }, - "lunch_break_end": { - "name": "lunch_break_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'13:00'" - }, - "morning_start": { - "name": "morning_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'08:00'" - }, - "afternoon_end": { - "name": "afternoon_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'17:00'" - }, - "avoid_back_to_back": { - "name": "avoid_back_to_back", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "balanced_subjects": { - "name": "balanced_subjects", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "scheduling_rules_class_idx": { - "name": "scheduling_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "scheduling_rules_id": { - "name": "scheduling_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "schools": { - "name": "schools", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schools_name_idx": { - "name": "schools_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "schools_code_idx": { - "name": "schools_code_idx", - "columns": [ - "code" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schools_id": { - "name": "schools_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "schools_name_unique": { - "name": "schools_name_unique", - "columns": [ - "name" - ] - }, - "schools_code_unique": { - "name": "schools_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "sessions": { - "name": "sessions", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "sessions_userId_users_id_fk": { - "name": "sessions_userId_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "sessions_sessionToken": { - "name": "sessions_sessionToken", - "columns": [ - "sessionToken" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "subjects": { - "name": "subjects", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "subjects_name_idx": { - "name": "subjects_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "subjects_id": { - "name": "subjects_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "subjects_name_unique": { - "name": "subjects_name_unique", - "columns": [ - "name" - ] - }, - "subjects_code_unique": { - "name": "subjects_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "submission_answers": { - "name": "submission_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "submission_idx": { - "name": "submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "submission_answers_submission_id_exam_submissions_id_fk": { - "name": "submission_answers_submission_id_exam_submissions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "submission_answers_question_id_questions_id_fk": { - "name": "submission_answers_question_id_questions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "submission_answers_id": { - "name": "submission_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "textbooks": { - "name": "textbooks", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "publisher": { - "name": "publisher", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "textbooks_id": { - "name": "textbooks_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "phone": { - "name": "phone", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "address": { - "name": "address", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gender": { - "name": "gender", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "age": { - "name": "age", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "department_id": { - "name": "department_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "onboarded_at": { - "name": "onboarded_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_name": { - "name": "guardian_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_phone": { - "name": "guardian_phone", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_relation": { - "name": "guardian_relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consent_accepted_at": { - "name": "consent_accepted_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": false - }, - "users_grade_id_idx": { - "name": "users_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "users_department_id_idx": { - "name": "users_department_id_idx", - "columns": [ - "department_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "users_id": { - "name": "users_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "columns": [ - "email" - ] - } - }, - "checkConstraint": {} - }, - "users_to_roles": { - "name": "users_to_roles", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "users_to_roles_user_id_users_id_fk": { - "name": "users_to_roles_user_id_users_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "users_to_roles_role_id_roles_id_fk": { - "name": "users_to_roles_role_id_roles_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "users_to_roles_user_id_role_id_pk": { - "name": "users_to_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "verificationTokens": { - "name": "verificationTokens", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verificationTokens_identifier_token_pk": { - "name": "verificationTokens_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - } - }, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {}, - "indexes": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/0002_snapshot.json b/drizzle/meta/0002_snapshot.json deleted file mode 100644 index 427fb03..0000000 --- a/drizzle/meta/0002_snapshot.json +++ /dev/null @@ -1,7250 +0,0 @@ -{ - "version": "5", - "dialect": "mysql", - "id": "f2b1af65-541e-41c5-9393-a5087fa3ca5f", - "prevId": "ce4890dc-330e-4599-b6df-b659f40e63f8", - "tables": { - "academic_years": { - "name": "academic_years", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_active": { - "name": "is_active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "academic_years_name_idx": { - "name": "academic_years_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "academic_years_active_idx": { - "name": "academic_years_active_idx", - "columns": [ - "is_active" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "academic_years_id": { - "name": "academic_years_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "academic_years_name_unique": { - "name": "academic_years_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "accounts": { - "name": "accounts", - "columns": { - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "accounts_userId_users_id_fk": { - "name": "accounts_userId_users_id_fk", - "tableFrom": "accounts", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "accounts_provider_providerAccountId_pk": { - "name": "accounts_provider_providerAccountId_pk", - "columns": [ - "provider", - "providerAccountId" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "ai_providers": { - "name": "ai_providers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "base_url": { - "name": "base_url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_encrypted": { - "name": "api_key_encrypted", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_last4": { - "name": "api_key_last4", - "type": "varchar(4)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ai_provider_idx": { - "name": "ai_provider_idx", - "columns": [ - "provider" - ], - "isUnique": false - }, - "ai_provider_default_idx": { - "name": "ai_provider_default_idx", - "columns": [ - "is_default" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "ai_providers_id": { - "name": "ai_providers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "announcements": { - "name": "announcements", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('school','grade','class')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'school'" - }, - "status": { - "name": "status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "target_grade_id": { - "name": "target_grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_class_id": { - "name": "target_class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "published_at": { - "name": "published_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "announcements_author_idx": { - "name": "announcements_author_idx", - "columns": [ - "author_id" - ], - "isUnique": false - }, - "announcements_status_idx": { - "name": "announcements_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "announcements_type_idx": { - "name": "announcements_type_idx", - "columns": [ - "type" - ], - "isUnique": false - }, - "announcements_target_grade_idx": { - "name": "announcements_target_grade_idx", - "columns": [ - "target_grade_id" - ], - "isUnique": false - }, - "announcements_target_class_idx": { - "name": "announcements_target_class_idx", - "columns": [ - "target_class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "announcements_author_id_users_id_fk": { - "name": "announcements_author_id_users_id_fk", - "tableFrom": "announcements", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "announcements_id": { - "name": "announcements_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_records": { - "name": "attendance_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "schedule_id": { - "name": "schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_records_student_idx": { - "name": "attendance_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "attendance_records_class_idx": { - "name": "attendance_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "attendance_records_date_idx": { - "name": "attendance_records_date_idx", - "columns": [ - "date" - ], - "isUnique": false - }, - "attendance_records_class_date_idx": { - "name": "attendance_records_class_date_idx", - "columns": [ - "class_id", - "date" - ], - "isUnique": false - }, - "attendance_records_student_date_idx": { - "name": "attendance_records_student_date_idx", - "columns": [ - "student_id", - "date" - ], - "isUnique": false - }, - "attendance_records_schedule_idx": { - "name": "attendance_records_schedule_idx", - "columns": [ - "schedule_id" - ], - "isUnique": false - }, - "attendance_records_recorded_by_idx": { - "name": "attendance_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_records_student_id_users_id_fk": { - "name": "attendance_records_student_id_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_class_id_classes_id_fk": { - "name": "attendance_records_class_id_classes_id_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_recorded_by_users_id_fk": { - "name": "attendance_records_recorded_by_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_c_fk": { - "name": "ar_c_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_s_fk": { - "name": "ar_s_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_rb_fk": { - "name": "ar_rb_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_records_id": { - "name": "attendance_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_rules": { - "name": "attendance_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "late_threshold_minutes": { - "name": "late_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "early_leave_threshold_minutes": { - "name": "early_leave_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "enable_auto_mark": { - "name": "enable_auto_mark", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_rules_class_idx": { - "name": "attendance_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_rules_class_id_classes_id_fk": { - "name": "attendance_rules_class_id_classes_id_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "atr_c_fk": { - "name": "atr_c_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_rules_id": { - "name": "attendance_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "audit_logs": { - "name": "audit_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_name": { - "name": "user_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "module": { - "name": "module", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "detail": { - "name": "detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "audit_logs_user_id_idx": { - "name": "audit_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "audit_logs_module_idx": { - "name": "audit_logs_module_idx", - "columns": [ - "module" - ], - "isUnique": false - }, - "audit_logs_action_idx": { - "name": "audit_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "audit_logs_status_idx": { - "name": "audit_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "audit_logs_created_at_idx": { - "name": "audit_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "audit_logs_id": { - "name": "audit_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "chapters": { - "name": "chapters", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "textbook_idx": { - "name": "textbook_idx", - "columns": [ - "textbook_id" - ], - "isUnique": false - }, - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "chapters_textbook_id_textbooks_id_fk": { - "name": "chapters_textbook_id_textbooks_id_fk", - "tableFrom": "chapters", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "chapters_id": { - "name": "chapters_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_enrollments": { - "name": "class_enrollments", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_enrollment_status": { - "name": "class_enrollment_status", - "type": "enum('active','inactive')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "class_enrollments_class_idx": { - "name": "class_enrollments_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_enrollments_student_idx": { - "name": "class_enrollments_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "ce_c_fk": { - "name": "ce_c_fk", - "tableFrom": "class_enrollments", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ce_s_fk": { - "name": "ce_s_fk", - "tableFrom": "class_enrollments", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_enrollments_class_id_student_id_pk": { - "name": "class_enrollments_class_id_student_id_pk", - "columns": [ - "class_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_schedule": { - "name": "class_schedule", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "weekday": { - "name": "weekday", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course": { - "name": "course", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "location": { - "name": "location", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_schedule_class_idx": { - "name": "class_schedule_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_schedule_class_day_idx": { - "name": "class_schedule_class_day_idx", - "columns": [ - "class_id", - "weekday" - ], - "isUnique": false - } - }, - "foreignKeys": { - "cs_c_fk": { - "name": "cs_c_fk", - "tableFrom": "class_schedule", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_schedule_id": { - "name": "class_schedule_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_subject_teachers": { - "name": "class_subject_teachers", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_subject_teachers_class_idx": { - "name": "class_subject_teachers_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_subject_teachers_teacher_idx": { - "name": "class_subject_teachers_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "class_subject_teachers_subject_id_idx": { - "name": "class_subject_teachers_subject_id_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_subject_teachers_teacher_id_users_id_fk": { - "name": "class_subject_teachers_teacher_id_users_id_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "cst_c_fk": { - "name": "cst_c_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cst_s_fk": { - "name": "cst_s_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_subject_teachers_class_id_subject_id_pk": { - "name": "class_subject_teachers_class_id_subject_id_pk", - "columns": [ - "class_id", - "subject_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "classes": { - "name": "classes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_name": { - "name": "school_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "homeroom": { - "name": "homeroom", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "room": { - "name": "room", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "invitation_code": { - "name": "invitation_code", - "type": "varchar(6)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classes_teacher_idx": { - "name": "classes_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "classes_grade_idx": { - "name": "classes_grade_idx", - "columns": [ - "grade" - ], - "isUnique": false - }, - "classes_school_idx": { - "name": "classes_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "classes_grade_id_idx": { - "name": "classes_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "classes_teacher_id_users_id_fk": { - "name": "classes_teacher_id_users_id_fk", - "tableFrom": "classes", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "c_s_fk": { - "name": "c_s_fk", - "tableFrom": "classes", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "c_g_fk": { - "name": "c_g_fk", - "tableFrom": "classes", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "classes_id": { - "name": "classes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classes_invitation_code_unique": { - "name": "classes_invitation_code_unique", - "columns": [ - "invitation_code" - ] - } - }, - "checkConstraint": {} - }, - "classrooms": { - "name": "classrooms", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "building": { - "name": "building", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "floor": { - "name": "floor", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classrooms_name_idx": { - "name": "classrooms_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "classrooms_id": { - "name": "classrooms_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classrooms_name_unique": { - "name": "classrooms_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "course_plan_items": { - "name": "course_plan_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "week": { - "name": "week", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hours": { - "name": "hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "textbook_chapter": { - "name": "textbook_chapter", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "notes": { - "name": "notes", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_completed": { - "name": "is_completed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "completed_at": { - "name": "completed_at", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plan_items_plan_idx": { - "name": "course_plan_items_plan_idx", - "columns": [ - "plan_id" - ], - "isUnique": false - }, - "course_plan_items_plan_week_idx": { - "name": "course_plan_items_plan_week_idx", - "columns": [ - "plan_id", - "week" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plan_items_plan_id_course_plans_id_fk": { - "name": "course_plan_items_plan_id_course_plans_id_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cpi_p_fk": { - "name": "cpi_p_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plan_items_id": { - "name": "course_plan_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_plans": { - "name": "course_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "total_hours": { - "name": "total_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "completed_hours": { - "name": "completed_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "weekly_hours": { - "name": "weekly_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "syllabus": { - "name": "syllabus", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "objectives": { - "name": "objectives", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('planning','active','completed','paused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'planning'" - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plans_class_idx": { - "name": "course_plans_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "course_plans_teacher_idx": { - "name": "course_plans_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "course_plans_subject_idx": { - "name": "course_plans_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "course_plans_status_idx": { - "name": "course_plans_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "course_plans_class_subject_idx": { - "name": "course_plans_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plans_class_id_classes_id_fk": { - "name": "course_plans_class_id_classes_id_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_subject_id_subjects_id_fk": { - "name": "course_plans_subject_id_subjects_id_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_teacher_id_users_id_fk": { - "name": "course_plans_teacher_id_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_created_by_users_id_fk": { - "name": "course_plans_created_by_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_c_fk": { - "name": "cp_c_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_s_fk": { - "name": "cp_s_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_t_fk": { - "name": "cp_t_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_cb_fk": { - "name": "cp_cb_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plans_id": { - "name": "course_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_selections": { - "name": "course_selections", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course_id": { - "name": "course_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "selection_status": { - "name": "selection_status", - "type": "enum('selected','enrolled','waitlist','dropped','rejected')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'selected'" - }, - "priority": { - "name": "priority", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "selected_at": { - "name": "selected_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "enrolled_at": { - "name": "enrolled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dropped_at": { - "name": "dropped_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "lottery_rank": { - "name": "lottery_rank", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_selections_course_idx": { - "name": "course_selections_course_idx", - "columns": [ - "course_id" - ], - "isUnique": false - }, - "course_selections_student_idx": { - "name": "course_selections_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "course_selections_status_idx": { - "name": "course_selections_status_idx", - "columns": [ - "selection_status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_selections_course_id_elective_courses_id_fk": { - "name": "course_selections_course_id_elective_courses_id_fk", - "tableFrom": "course_selections", - "tableTo": "elective_courses", - "columnsFrom": [ - "course_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_selections_student_id_users_id_fk": { - "name": "course_selections_student_id_users_id_fk", - "tableFrom": "course_selections", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_selections_id": { - "name": "course_selections_id", - "columns": [ - "id" - ] - }, - "course_selections_course_id_student_id_pk": { - "name": "course_selections_course_id_student_id_pk", - "columns": [ - "course_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "data_change_logs": { - "name": "data_change_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "table_name": { - "name": "table_name", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "record_id": { - "name": "record_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('create','update','delete')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "old_value": { - "name": "old_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_value": { - "name": "new_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "changed_by": { - "name": "changed_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "changed_by_name": { - "name": "changed_by_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "data_change_logs_table_name_idx": { - "name": "data_change_logs_table_name_idx", - "columns": [ - "table_name" - ], - "isUnique": false - }, - "data_change_logs_record_id_idx": { - "name": "data_change_logs_record_id_idx", - "columns": [ - "record_id" - ], - "isUnique": false - }, - "data_change_logs_action_idx": { - "name": "data_change_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "data_change_logs_changed_by_idx": { - "name": "data_change_logs_changed_by_idx", - "columns": [ - "changed_by" - ], - "isUnique": false - }, - "data_change_logs_created_at_idx": { - "name": "data_change_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "data_change_logs_id": { - "name": "data_change_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "departments": { - "name": "departments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "departments_name_idx": { - "name": "departments_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "departments_id": { - "name": "departments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "departments_name_unique": { - "name": "departments_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "elective_courses": { - "name": "elective_courses", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "enrolled_count": { - "name": "enrolled_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "classroom": { - "name": "classroom", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "schedule": { - "name": "schedule", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_start_at": { - "name": "selection_start_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_end_at": { - "name": "selection_end_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('draft','open','closed','cancelled')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "selection_mode": { - "name": "selection_mode", - "type": "enum('fcfs','lottery')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'fcfs'" - }, - "credit": { - "name": "credit", - "type": "decimal(3,1)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'1.0'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "elective_courses_teacher_idx": { - "name": "elective_courses_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "elective_courses_subject_idx": { - "name": "elective_courses_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "elective_courses_grade_idx": { - "name": "elective_courses_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "elective_courses_status_idx": { - "name": "elective_courses_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "elective_courses_subject_id_subjects_id_fk": { - "name": "elective_courses_subject_id_subjects_id_fk", - "tableFrom": "elective_courses", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "elective_courses_teacher_id_users_id_fk": { - "name": "elective_courses_teacher_id_users_id_fk", - "tableFrom": "elective_courses", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "elective_courses_grade_id_grades_id_fk": { - "name": "elective_courses_grade_id_grades_id_fk", - "tableFrom": "elective_courses", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "elective_courses_id": { - "name": "elective_courses_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_proctoring_events": { - "name": "exam_proctoring_events", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_type": { - "name": "event_type", - "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_detail": { - "name": "event_detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "occurred_at": { - "name": "occurred_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "proctoring_submission_idx": { - "name": "proctoring_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "proctoring_student_idx": { - "name": "proctoring_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "proctoring_exam_idx": { - "name": "proctoring_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "proctoring_event_type_idx": { - "name": "proctoring_event_type_idx", - "columns": [ - "event_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_proctoring_events_submission_id_exam_submissions_id_fk": { - "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_student_id_users_id_fk": { - "name": "exam_proctoring_events_student_id_users_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_exam_id_exams_id_fk": { - "name": "exam_proctoring_events_exam_id_exams_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_proctoring_events_id": { - "name": "exam_proctoring_events_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_questions": { - "name": "exam_questions", - "columns": { - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "exam_questions_exam_id_exams_id_fk": { - "name": "exam_questions_exam_id_exams_id_fk", - "tableFrom": "exam_questions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_questions_question_id_questions_id_fk": { - "name": "exam_questions_question_id_questions_id_fk", - "tableFrom": "exam_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_questions_exam_id_question_id_pk": { - "name": "exam_questions_exam_id_question_id_pk", - "columns": [ - "exam_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_submissions": { - "name": "exam_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exam_student_idx": { - "name": "exam_student_idx", - "columns": [ - "exam_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_submissions_exam_id_exams_id_fk": { - "name": "exam_submissions_exam_id_exams_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_submissions_student_id_users_id_fk": { - "name": "exam_submissions_student_id_users_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_submissions_id": { - "name": "exam_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exams": { - "name": "exams", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "exam_mode": { - "name": "exam_mode", - "type": "enum('homework','timed','proctored')", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'homework'" - }, - "duration_minutes": { - "name": "duration_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "shuffle_questions": { - "name": "shuffle_questions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "allow_late_start": { - "name": "allow_late_start", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "late_start_grace_minutes": { - "name": "late_start_grace_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "anti_cheat_enabled": { - "name": "anti_cheat_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exams_subject_idx": { - "name": "exams_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "exams_grade_idx": { - "name": "exams_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exams_creator_id_users_id_fk": { - "name": "exams_creator_id_users_id_fk", - "tableFrom": "exams", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_subject_id_subjects_id_fk": { - "name": "exams_subject_id_subjects_id_fk", - "tableFrom": "exams", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_grade_id_grades_id_fk": { - "name": "exams_grade_id_grades_id_fk", - "tableFrom": "exams", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exams_id": { - "name": "exams_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "file_attachments": { - "name": "file_attachments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "bigint", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "storage_path": { - "name": "storage_path", - "type": "varchar(512)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "file_attachments_uploader_idx": { - "name": "file_attachments_uploader_idx", - "columns": [ - "uploader_id" - ], - "isUnique": false - }, - "file_attachments_target_idx": { - "name": "file_attachments_target_idx", - "columns": [ - "target_type", - "target_id" - ], - "isUnique": false - }, - "file_attachments_created_at_idx": { - "name": "file_attachments_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "file_attachments_uploader_id_users_id_fk": { - "name": "file_attachments_uploader_id_users_id_fk", - "tableFrom": "file_attachments", - "tableTo": "users", - "columnsFrom": [ - "uploader_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "file_attachments_id": { - "name": "file_attachments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grade_records": { - "name": "grade_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "full_score": { - "name": "full_score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'100'" - }, - "type": { - "name": "type", - "type": "enum('exam','quiz','homework','other')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'exam'" - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grade_records_student_idx": { - "name": "grade_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "grade_records_class_idx": { - "name": "grade_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "grade_records_subject_idx": { - "name": "grade_records_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "grade_records_exam_idx": { - "name": "grade_records_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "grade_records_class_subject_idx": { - "name": "grade_records_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - }, - "grade_records_recorded_by_idx": { - "name": "grade_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "grade_records_student_id_users_id_fk": { - "name": "grade_records_student_id_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_class_id_classes_id_fk": { - "name": "grade_records_class_id_classes_id_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_subject_id_subjects_id_fk": { - "name": "grade_records_subject_id_subjects_id_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_recorded_by_users_id_fk": { - "name": "grade_records_recorded_by_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_c_fk": { - "name": "gr_c_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_s_fk": { - "name": "gr_s_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_sub_fk": { - "name": "gr_sub_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_rb_fk": { - "name": "gr_rb_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grade_records_id": { - "name": "grade_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grades": { - "name": "grades", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "grade_head_id": { - "name": "grade_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teaching_head_id": { - "name": "teaching_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grades_school_idx": { - "name": "grades_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "grades_school_name_uniq": { - "name": "grades_school_name_uniq", - "columns": [ - "school_id", - "name" - ], - "isUnique": false - }, - "grades_grade_head_idx": { - "name": "grades_grade_head_idx", - "columns": [ - "grade_head_id" - ], - "isUnique": false - }, - "grades_teaching_head_idx": { - "name": "grades_teaching_head_idx", - "columns": [ - "teaching_head_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "g_s_fk": { - "name": "g_s_fk", - "tableFrom": "grades", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "g_gh_fk": { - "name": "g_gh_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "grade_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "g_th_fk": { - "name": "g_th_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "teaching_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grades_id": { - "name": "grades_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_answers": { - "name": "homework_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_answer_submission_idx": { - "name": "hw_answer_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "hw_answer_submission_question_idx": { - "name": "hw_answer_submission_question_idx", - "columns": [ - "submission_id", - "question_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_ans_sub_fk": { - "name": "hw_ans_sub_fk", - "tableFrom": "homework_answers", - "tableTo": "homework_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_ans_q_fk": { - "name": "hw_ans_q_fk", - "tableFrom": "homework_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_answers_id": { - "name": "homework_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_questions": { - "name": "homework_assignment_questions", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "hw_assignment_questions_assignment_idx": { - "name": "hw_assignment_questions_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_aq_a_fk": { - "name": "hw_aq_a_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_aq_q_fk": { - "name": "hw_aq_q_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_questions_assignment_id_question_id_pk": { - "name": "homework_assignment_questions_assignment_id_question_id_pk", - "columns": [ - "assignment_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_targets": { - "name": "homework_assignment_targets", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_targets_assignment_idx": { - "name": "hw_assignment_targets_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - }, - "hw_assignment_targets_student_idx": { - "name": "hw_assignment_targets_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_at_a_fk": { - "name": "hw_at_a_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_at_s_fk": { - "name": "hw_at_s_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_targets_assignment_id_student_id_pk": { - "name": "homework_assignment_targets_assignment_id_student_id_pk", - "columns": [ - "assignment_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignments": { - "name": "homework_assignments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_exam_id": { - "name": "source_exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "available_at": { - "name": "available_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "due_at": { - "name": "due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_late": { - "name": "allow_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "late_due_at": { - "name": "late_due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_attempts": { - "name": "max_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_creator_idx": { - "name": "hw_assignment_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "hw_assignment_source_exam_idx": { - "name": "hw_assignment_source_exam_idx", - "columns": [ - "source_exam_id" - ], - "isUnique": false - }, - "hw_assignment_status_idx": { - "name": "hw_assignment_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_asg_exam_fk": { - "name": "hw_asg_exam_fk", - "tableFrom": "homework_assignments", - "tableTo": "exams", - "columnsFrom": [ - "source_exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_asg_creator_fk": { - "name": "hw_asg_creator_fk", - "tableFrom": "homework_assignments", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignments_id": { - "name": "homework_assignments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_submissions": { - "name": "homework_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "attempt_no": { - "name": "attempt_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "started_at": { - "name": "started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_late": { - "name": "is_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_student_idx": { - "name": "hw_assignment_student_idx", - "columns": [ - "assignment_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_sub_a_fk": { - "name": "hw_sub_a_fk", - "tableFrom": "homework_submissions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_sub_student_fk": { - "name": "hw_sub_student_fk", - "tableFrom": "homework_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_submissions_id": { - "name": "homework_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_mastery": { - "name": "knowledge_point_mastery", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mastery_level": { - "name": "mastery_level", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "total_questions": { - "name": "total_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_questions": { - "name": "correct_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_assessed_at": { - "name": "last_assessed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "mastery_student_idx": { - "name": "mastery_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "mastery_kp_idx": { - "name": "mastery_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "knowledge_point_mastery_student_id_users_id_fk": { - "name": "knowledge_point_mastery_student_id_users_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk": { - "name": "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_mastery_id": { - "name": "knowledge_point_mastery_id", - "columns": [ - "id" - ] - }, - "knowledge_point_mastery_student_id_knowledge_point_id_pk": { - "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", - "columns": [ - "student_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_points": { - "name": "knowledge_points", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "anchor_text": { - "name": "anchor_text", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "level": { - "name": "level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "kp_chapter_id_idx": { - "name": "kp_chapter_id_idx", - "columns": [ - "chapter_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "knowledge_points_id": { - "name": "knowledge_points_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "learning_diagnostic_reports": { - "name": "learning_diagnostic_reports", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "generated_by": { - "name": "generated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_type": { - "name": "report_type", - "type": "enum('individual','class','grade')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'individual'" - }, - "period": { - "name": "period", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "summary": { - "name": "summary", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "strengths": { - "name": "strengths", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "weaknesses": { - "name": "weaknesses", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recommendations": { - "name": "recommendations", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "overall_score": { - "name": "overall_score", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_status": { - "name": "report_status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "diagnostic_student_idx": { - "name": "diagnostic_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "diagnostic_generated_by_idx": { - "name": "diagnostic_generated_by_idx", - "columns": [ - "generated_by" - ], - "isUnique": false - }, - "diagnostic_status_idx": { - "name": "diagnostic_status_idx", - "columns": [ - "report_status" - ], - "isUnique": false - }, - "diagnostic_report_type_idx": { - "name": "diagnostic_report_type_idx", - "columns": [ - "report_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "learning_diagnostic_reports_student_id_users_id_fk": { - "name": "learning_diagnostic_reports_student_id_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "learning_diagnostic_reports_generated_by_users_id_fk": { - "name": "learning_diagnostic_reports_generated_by_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "generated_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "learning_diagnostic_reports_id": { - "name": "learning_diagnostic_reports_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_templates": { - "name": "lesson_plan_templates", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "blocks": { - "name": "blocks", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lpt_type_creator_idx": { - "name": "lpt_type_creator_idx", - "columns": [ - "type", - "creator_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_templates_creator_id_users_id_fk": { - "name": "lesson_plan_templates_creator_id_users_id_fk", - "tableFrom": "lesson_plan_templates", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_templates_id": { - "name": "lesson_plan_templates_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_versions": { - "name": "lesson_plan_versions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "version_no": { - "name": "version_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_auto": { - "name": "is_auto", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "lpv_plan_version_idx": { - "name": "lpv_plan_version_idx", - "columns": [ - "plan_id", - "version_no" - ], - "isUnique": false - }, - "lpv_plan_created_idx": { - "name": "lpv_plan_created_idx", - "columns": [ - "plan_id", - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_versions_plan_id_lesson_plans_id_fk": { - "name": "lesson_plan_versions_plan_id_lesson_plans_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "lesson_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "lesson_plan_versions_creator_id_users_id_fk": { - "name": "lesson_plan_versions_creator_id_users_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_versions_id": { - "name": "lesson_plan_versions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plans": { - "name": "lesson_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "course_plan_item_id": { - "name": "course_plan_item_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_id": { - "name": "template_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_name": { - "name": "template_name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_saved_at": { - "name": "last_saved_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lp_creator_idx": { - "name": "lp_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "lp_status_idx": { - "name": "lp_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "lp_textbook_chapter_idx": { - "name": "lp_textbook_chapter_idx", - "columns": [ - "textbook_id", - "chapter_id" - ], - "isUnique": false - }, - "lp_subject_grade_idx": { - "name": "lp_subject_grade_idx", - "columns": [ - "subject_id", - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plans_textbook_id_textbooks_id_fk": { - "name": "lesson_plans_textbook_id_textbooks_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_chapter_id_chapters_id_fk": { - "name": "lesson_plans_chapter_id_chapters_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "chapters", - "columnsFrom": [ - "chapter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_subject_id_subjects_id_fk": { - "name": "lesson_plans_subject_id_subjects_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_grade_id_grades_id_fk": { - "name": "lesson_plans_grade_id_grades_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_creator_id_users_id_fk": { - "name": "lesson_plans_creator_id_users_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plans_id": { - "name": "lesson_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "login_logs": { - "name": "login_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_email": { - "name": "user_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('signin','signout','signup')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "login_logs_user_id_idx": { - "name": "login_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "login_logs_user_email_idx": { - "name": "login_logs_user_email_idx", - "columns": [ - "user_email" - ], - "isUnique": false - }, - "login_logs_action_idx": { - "name": "login_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "login_logs_status_idx": { - "name": "login_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "login_logs_created_at_idx": { - "name": "login_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "login_logs_id": { - "name": "login_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "message_notifications": { - "name": "message_notifications", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "link": { - "name": "link", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "message_notifications_user_idx": { - "name": "message_notifications_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "message_notifications_is_read_idx": { - "name": "message_notifications_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "message_notifications_user_read_idx": { - "name": "message_notifications_user_read_idx", - "columns": [ - "user_id", - "is_read" - ], - "isUnique": false - }, - "message_notifications_created_at_idx": { - "name": "message_notifications_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "message_notifications_user_id_users_id_fk": { - "name": "message_notifications_user_id_users_id_fk", - "tableFrom": "message_notifications", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "message_notifications_id": { - "name": "message_notifications_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "sender_id": { - "name": "sender_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "receiver_id": { - "name": "receiver_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "read_at": { - "name": "read_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_message_id": { - "name": "parent_message_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "messages_sender_idx": { - "name": "messages_sender_idx", - "columns": [ - "sender_id" - ], - "isUnique": false - }, - "messages_receiver_idx": { - "name": "messages_receiver_idx", - "columns": [ - "receiver_id" - ], - "isUnique": false - }, - "messages_is_read_idx": { - "name": "messages_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "messages_parent_idx": { - "name": "messages_parent_idx", - "columns": [ - "parent_message_id" - ], - "isUnique": false - }, - "messages_receiver_read_idx": { - "name": "messages_receiver_read_idx", - "columns": [ - "receiver_id", - "is_read" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_sender_id_users_id_fk": { - "name": "messages_sender_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "sender_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_receiver_id_users_id_fk": { - "name": "messages_receiver_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "receiver_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "messages_id": { - "name": "messages_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "notification_preferences": { - "name": "notification_preferences", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_enabled": { - "name": "email_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "sms_enabled": { - "name": "sms_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "push_enabled": { - "name": "push_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "homework_notifications": { - "name": "homework_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "grade_notifications": { - "name": "grade_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "announcement_notifications": { - "name": "announcement_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "message_notifications": { - "name": "message_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "attendance_notifications": { - "name": "attendance_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "notification_preferences_user_idx": { - "name": "notification_preferences_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "notification_preferences_user_id_users_id_fk": { - "name": "notification_preferences_user_id_users_id_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "np_u_fk": { - "name": "np_u_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "notification_preferences_id": { - "name": "notification_preferences_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "notification_preferences_user_id_unique": { - "name": "notification_preferences_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "parent_student_relations": { - "name": "parent_student_relations", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "relation": { - "name": "relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "parent_student_relations_parent_idx": { - "name": "parent_student_relations_parent_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "parent_student_relations_student_idx": { - "name": "parent_student_relations_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "parent_student_relations_parent_id_users_id_fk": { - "name": "parent_student_relations_parent_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parent_student_relations_student_id_users_id_fk": { - "name": "parent_student_relations_student_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_p_fk": { - "name": "psr_p_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_s_fk": { - "name": "psr_s_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "parent_student_relations_id": { - "name": "parent_student_relations_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "password_security": { - "name": "password_security", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "failed_login_attempts": { - "name": "failed_login_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "locked_until": { - "name": "locked_until", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "must_change_password": { - "name": "must_change_password", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "last_password_change": { - "name": "last_password_change", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "password_security_user_idx": { - "name": "password_security_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "password_security_user_id_users_id_fk": { - "name": "password_security_user_id_users_id_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ps_u_fk": { - "name": "ps_u_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "password_security_id": { - "name": "password_security_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "password_security_user_id_unique": { - "name": "password_security_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "questions": { - "name": "questions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('single_choice','multiple_choice','text','judgment','composite')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "difficulty": { - "name": "difficulty", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "author_id_idx": { - "name": "author_id_idx", - "columns": [ - "author_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "questions_author_id_users_id_fk": { - "name": "questions_author_id_users_id_fk", - "tableFrom": "questions", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_id": { - "name": "questions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "questions_to_knowledge_points": { - "name": "questions_to_knowledge_points", - "columns": { - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "kp_idx": { - "name": "kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "q_kp_qid_fk": { - "name": "q_kp_qid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "q_kp_kpid_fk": { - "name": "q_kp_kpid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_to_knowledge_points_question_id_knowledge_point_id_pk": { - "name": "questions_to_knowledge_points_question_id_knowledge_point_id_pk", - "columns": [ - "question_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "role_permissions": { - "name": "role_permissions", - "columns": { - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "permission": { - "name": "permission", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "role_permissions_role_idx": { - "name": "role_permissions_role_idx", - "columns": [ - "role_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "role_permissions_role_id_roles_id_fk": { - "name": "role_permissions_role_id_roles_id_fk", - "tableFrom": "role_permissions", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "role_permissions_role_id_permission_pk": { - "name": "role_permissions_role_id_permission_pk", - "columns": [ - "role_id", - "permission" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "roles_id": { - "name": "roles_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "schedule_changes": { - "name": "schedule_changes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_schedule_id": { - "name": "original_schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_teacher_id": { - "name": "original_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "substitute_teacher_id": { - "name": "substitute_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_date": { - "name": "original_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_date": { - "name": "new_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_start_time": { - "name": "new_start_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_end_time": { - "name": "new_end_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('pending','approved','rejected','completed')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "requested_by": { - "name": "requested_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "approved_by": { - "name": "approved_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schedule_changes_class_idx": { - "name": "schedule_changes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "schedule_changes_status_idx": { - "name": "schedule_changes_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "schedule_changes_requested_by_idx": { - "name": "schedule_changes_requested_by_idx", - "columns": [ - "requested_by" - ], - "isUnique": false - }, - "schedule_changes_original_schedule_idx": { - "name": "schedule_changes_original_schedule_idx", - "columns": [ - "original_schedule_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schedule_changes_id": { - "name": "schedule_changes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "scheduling_rules": { - "name": "scheduling_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_daily_hours": { - "name": "max_daily_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 8 - }, - "max_continuous_hours": { - "name": "max_continuous_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "lunch_break_start": { - "name": "lunch_break_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'12:00'" - }, - "lunch_break_end": { - "name": "lunch_break_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'13:00'" - }, - "morning_start": { - "name": "morning_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'08:00'" - }, - "afternoon_end": { - "name": "afternoon_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'17:00'" - }, - "avoid_back_to_back": { - "name": "avoid_back_to_back", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "balanced_subjects": { - "name": "balanced_subjects", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "scheduling_rules_class_idx": { - "name": "scheduling_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "scheduling_rules_id": { - "name": "scheduling_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "schools": { - "name": "schools", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schools_name_idx": { - "name": "schools_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "schools_code_idx": { - "name": "schools_code_idx", - "columns": [ - "code" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schools_id": { - "name": "schools_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "schools_name_unique": { - "name": "schools_name_unique", - "columns": [ - "name" - ] - }, - "schools_code_unique": { - "name": "schools_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "sessions": { - "name": "sessions", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "sessions_userId_users_id_fk": { - "name": "sessions_userId_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "sessions_sessionToken": { - "name": "sessions_sessionToken", - "columns": [ - "sessionToken" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "subjects": { - "name": "subjects", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "subjects_name_idx": { - "name": "subjects_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "subjects_id": { - "name": "subjects_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "subjects_name_unique": { - "name": "subjects_name_unique", - "columns": [ - "name" - ] - }, - "subjects_code_unique": { - "name": "subjects_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "submission_answers": { - "name": "submission_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "submission_idx": { - "name": "submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "submission_answers_submission_id_exam_submissions_id_fk": { - "name": "submission_answers_submission_id_exam_submissions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "submission_answers_question_id_questions_id_fk": { - "name": "submission_answers_question_id_questions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "submission_answers_id": { - "name": "submission_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "textbooks": { - "name": "textbooks", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "publisher": { - "name": "publisher", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "textbooks_id": { - "name": "textbooks_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "phone": { - "name": "phone", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "address": { - "name": "address", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gender": { - "name": "gender", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "age": { - "name": "age", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "department_id": { - "name": "department_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "onboarded_at": { - "name": "onboarded_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_name": { - "name": "guardian_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_phone": { - "name": "guardian_phone", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_relation": { - "name": "guardian_relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consent_accepted_at": { - "name": "consent_accepted_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": false - }, - "users_grade_id_idx": { - "name": "users_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "users_department_id_idx": { - "name": "users_department_id_idx", - "columns": [ - "department_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "users_id": { - "name": "users_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "columns": [ - "email" - ] - } - }, - "checkConstraint": {} - }, - "users_to_roles": { - "name": "users_to_roles", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "users_to_roles_user_id_users_id_fk": { - "name": "users_to_roles_user_id_users_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "users_to_roles_role_id_roles_id_fk": { - "name": "users_to_roles_role_id_roles_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "users_to_roles_user_id_role_id_pk": { - "name": "users_to_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "verificationTokens": { - "name": "verificationTokens", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verificationTokens_identifier_token_pk": { - "name": "verificationTokens_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - } - }, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {}, - "indexes": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/0003_snapshot.json b/drizzle/meta/0003_snapshot.json deleted file mode 100644 index 675074f..0000000 --- a/drizzle/meta/0003_snapshot.json +++ /dev/null @@ -1,7562 +0,0 @@ -{ - "version": "5", - "dialect": "mysql", - "id": "6fe72813-5ec3-4b06-a7d1-a475e3a06ddf", - "prevId": "f2b1af65-541e-41c5-9393-a5087fa3ca5f", - "tables": { - "academic_years": { - "name": "academic_years", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_active": { - "name": "is_active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "academic_years_name_idx": { - "name": "academic_years_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "academic_years_active_idx": { - "name": "academic_years_active_idx", - "columns": [ - "is_active" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "academic_years_id": { - "name": "academic_years_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "academic_years_name_unique": { - "name": "academic_years_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "accounts": { - "name": "accounts", - "columns": { - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "accounts_userId_users_id_fk": { - "name": "accounts_userId_users_id_fk", - "tableFrom": "accounts", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "accounts_provider_providerAccountId_pk": { - "name": "accounts_provider_providerAccountId_pk", - "columns": [ - "provider", - "providerAccountId" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "ai_providers": { - "name": "ai_providers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "base_url": { - "name": "base_url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_encrypted": { - "name": "api_key_encrypted", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_last4": { - "name": "api_key_last4", - "type": "varchar(4)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ai_provider_idx": { - "name": "ai_provider_idx", - "columns": [ - "provider" - ], - "isUnique": false - }, - "ai_provider_default_idx": { - "name": "ai_provider_default_idx", - "columns": [ - "is_default" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "ai_providers_id": { - "name": "ai_providers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "announcements": { - "name": "announcements", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('school','grade','class')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'school'" - }, - "status": { - "name": "status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "target_grade_id": { - "name": "target_grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_class_id": { - "name": "target_class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "published_at": { - "name": "published_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "announcements_author_idx": { - "name": "announcements_author_idx", - "columns": [ - "author_id" - ], - "isUnique": false - }, - "announcements_status_idx": { - "name": "announcements_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "announcements_type_idx": { - "name": "announcements_type_idx", - "columns": [ - "type" - ], - "isUnique": false - }, - "announcements_target_grade_idx": { - "name": "announcements_target_grade_idx", - "columns": [ - "target_grade_id" - ], - "isUnique": false - }, - "announcements_target_class_idx": { - "name": "announcements_target_class_idx", - "columns": [ - "target_class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "announcements_author_id_users_id_fk": { - "name": "announcements_author_id_users_id_fk", - "tableFrom": "announcements", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "announcements_id": { - "name": "announcements_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_records": { - "name": "attendance_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "schedule_id": { - "name": "schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_records_student_idx": { - "name": "attendance_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "attendance_records_class_idx": { - "name": "attendance_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "attendance_records_date_idx": { - "name": "attendance_records_date_idx", - "columns": [ - "date" - ], - "isUnique": false - }, - "attendance_records_class_date_idx": { - "name": "attendance_records_class_date_idx", - "columns": [ - "class_id", - "date" - ], - "isUnique": false - }, - "attendance_records_student_date_idx": { - "name": "attendance_records_student_date_idx", - "columns": [ - "student_id", - "date" - ], - "isUnique": false - }, - "attendance_records_schedule_idx": { - "name": "attendance_records_schedule_idx", - "columns": [ - "schedule_id" - ], - "isUnique": false - }, - "attendance_records_recorded_by_idx": { - "name": "attendance_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_records_student_id_users_id_fk": { - "name": "attendance_records_student_id_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_class_id_classes_id_fk": { - "name": "attendance_records_class_id_classes_id_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_recorded_by_users_id_fk": { - "name": "attendance_records_recorded_by_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_c_fk": { - "name": "ar_c_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_s_fk": { - "name": "ar_s_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_rb_fk": { - "name": "ar_rb_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_records_id": { - "name": "attendance_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_rules": { - "name": "attendance_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "late_threshold_minutes": { - "name": "late_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "early_leave_threshold_minutes": { - "name": "early_leave_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "enable_auto_mark": { - "name": "enable_auto_mark", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_rules_class_idx": { - "name": "attendance_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_rules_class_id_classes_id_fk": { - "name": "attendance_rules_class_id_classes_id_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "atr_c_fk": { - "name": "atr_c_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_rules_id": { - "name": "attendance_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "audit_logs": { - "name": "audit_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_name": { - "name": "user_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "module": { - "name": "module", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "detail": { - "name": "detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "audit_logs_user_id_idx": { - "name": "audit_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "audit_logs_module_idx": { - "name": "audit_logs_module_idx", - "columns": [ - "module" - ], - "isUnique": false - }, - "audit_logs_action_idx": { - "name": "audit_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "audit_logs_status_idx": { - "name": "audit_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "audit_logs_created_at_idx": { - "name": "audit_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "audit_logs_id": { - "name": "audit_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "chapters": { - "name": "chapters", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "textbook_idx": { - "name": "textbook_idx", - "columns": [ - "textbook_id" - ], - "isUnique": false - }, - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "chapters_textbook_id_textbooks_id_fk": { - "name": "chapters_textbook_id_textbooks_id_fk", - "tableFrom": "chapters", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "chapters_id": { - "name": "chapters_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_enrollments": { - "name": "class_enrollments", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_enrollment_status": { - "name": "class_enrollment_status", - "type": "enum('active','inactive')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "class_enrollments_class_idx": { - "name": "class_enrollments_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_enrollments_student_idx": { - "name": "class_enrollments_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "ce_c_fk": { - "name": "ce_c_fk", - "tableFrom": "class_enrollments", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ce_s_fk": { - "name": "ce_s_fk", - "tableFrom": "class_enrollments", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_enrollments_class_id_student_id_pk": { - "name": "class_enrollments_class_id_student_id_pk", - "columns": [ - "class_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_invitation_codes": { - "name": "class_invitation_codes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(8)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_invitation_code_status": { - "name": "class_invitation_code_status", - "type": "enum('active','disabled','expired','exhausted')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "max_uses": { - "name": "max_uses", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "used_count": { - "name": "used_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - }, - "revoked_at": { - "name": "revoked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "revoked_by": { - "name": "revoked_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "note": { - "name": "note", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "class_invitation_codes_code_idx": { - "name": "class_invitation_codes_code_idx", - "columns": [ - "code" - ], - "isUnique": true - }, - "class_invitation_codes_class_idx": { - "name": "class_invitation_codes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_invitation_codes_status_expires_idx": { - "name": "class_invitation_codes_status_expires_idx", - "columns": [ - "class_invitation_code_status", - "expires_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_invitation_codes_class_id_classes_id_fk": { - "name": "class_invitation_codes_class_id_classes_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "class_invitation_codes_created_by_users_id_fk": { - "name": "class_invitation_codes_created_by_users_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cic_c_fk": { - "name": "cic_c_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_invitation_codes_id": { - "name": "class_invitation_codes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "class_invitation_codes_code_unique": { - "name": "class_invitation_codes_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "class_schedule": { - "name": "class_schedule", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "weekday": { - "name": "weekday", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course": { - "name": "course", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "location": { - "name": "location", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_schedule_class_idx": { - "name": "class_schedule_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_schedule_class_day_idx": { - "name": "class_schedule_class_day_idx", - "columns": [ - "class_id", - "weekday" - ], - "isUnique": false - } - }, - "foreignKeys": { - "cs_c_fk": { - "name": "cs_c_fk", - "tableFrom": "class_schedule", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_schedule_id": { - "name": "class_schedule_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_subject_teachers": { - "name": "class_subject_teachers", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_subject_teachers_class_idx": { - "name": "class_subject_teachers_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_subject_teachers_teacher_idx": { - "name": "class_subject_teachers_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "class_subject_teachers_subject_id_idx": { - "name": "class_subject_teachers_subject_id_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_subject_teachers_teacher_id_users_id_fk": { - "name": "class_subject_teachers_teacher_id_users_id_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "cst_c_fk": { - "name": "cst_c_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cst_s_fk": { - "name": "cst_s_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_subject_teachers_class_id_subject_id_pk": { - "name": "class_subject_teachers_class_id_subject_id_pk", - "columns": [ - "class_id", - "subject_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "classes": { - "name": "classes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_name": { - "name": "school_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "homeroom": { - "name": "homeroom", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "room": { - "name": "room", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "invitation_code": { - "name": "invitation_code", - "type": "varchar(6)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classes_teacher_idx": { - "name": "classes_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "classes_grade_idx": { - "name": "classes_grade_idx", - "columns": [ - "grade" - ], - "isUnique": false - }, - "classes_school_idx": { - "name": "classes_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "classes_grade_id_idx": { - "name": "classes_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "classes_teacher_id_users_id_fk": { - "name": "classes_teacher_id_users_id_fk", - "tableFrom": "classes", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "c_s_fk": { - "name": "c_s_fk", - "tableFrom": "classes", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "c_g_fk": { - "name": "c_g_fk", - "tableFrom": "classes", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "classes_id": { - "name": "classes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classes_invitation_code_unique": { - "name": "classes_invitation_code_unique", - "columns": [ - "invitation_code" - ] - } - }, - "checkConstraint": {} - }, - "classrooms": { - "name": "classrooms", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "building": { - "name": "building", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "floor": { - "name": "floor", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classrooms_name_idx": { - "name": "classrooms_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "classrooms_id": { - "name": "classrooms_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classrooms_name_unique": { - "name": "classrooms_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "course_plan_items": { - "name": "course_plan_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "week": { - "name": "week", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hours": { - "name": "hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "textbook_chapter": { - "name": "textbook_chapter", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "notes": { - "name": "notes", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_completed": { - "name": "is_completed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "completed_at": { - "name": "completed_at", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plan_items_plan_idx": { - "name": "course_plan_items_plan_idx", - "columns": [ - "plan_id" - ], - "isUnique": false - }, - "course_plan_items_plan_week_idx": { - "name": "course_plan_items_plan_week_idx", - "columns": [ - "plan_id", - "week" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plan_items_plan_id_course_plans_id_fk": { - "name": "course_plan_items_plan_id_course_plans_id_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cpi_p_fk": { - "name": "cpi_p_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plan_items_id": { - "name": "course_plan_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_plans": { - "name": "course_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "total_hours": { - "name": "total_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "completed_hours": { - "name": "completed_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "weekly_hours": { - "name": "weekly_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "syllabus": { - "name": "syllabus", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "objectives": { - "name": "objectives", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('planning','active','completed','paused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'planning'" - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plans_class_idx": { - "name": "course_plans_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "course_plans_teacher_idx": { - "name": "course_plans_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "course_plans_subject_idx": { - "name": "course_plans_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "course_plans_status_idx": { - "name": "course_plans_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "course_plans_class_subject_idx": { - "name": "course_plans_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plans_class_id_classes_id_fk": { - "name": "course_plans_class_id_classes_id_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_subject_id_subjects_id_fk": { - "name": "course_plans_subject_id_subjects_id_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_teacher_id_users_id_fk": { - "name": "course_plans_teacher_id_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_created_by_users_id_fk": { - "name": "course_plans_created_by_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_c_fk": { - "name": "cp_c_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_s_fk": { - "name": "cp_s_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_t_fk": { - "name": "cp_t_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_cb_fk": { - "name": "cp_cb_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plans_id": { - "name": "course_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_selections": { - "name": "course_selections", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course_id": { - "name": "course_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "selection_status": { - "name": "selection_status", - "type": "enum('selected','enrolled','waitlist','dropped','rejected')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'selected'" - }, - "priority": { - "name": "priority", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "selected_at": { - "name": "selected_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "enrolled_at": { - "name": "enrolled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dropped_at": { - "name": "dropped_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "lottery_rank": { - "name": "lottery_rank", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_selections_course_idx": { - "name": "course_selections_course_idx", - "columns": [ - "course_id" - ], - "isUnique": false - }, - "course_selections_student_idx": { - "name": "course_selections_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "course_selections_status_idx": { - "name": "course_selections_status_idx", - "columns": [ - "selection_status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_selections_course_id_elective_courses_id_fk": { - "name": "course_selections_course_id_elective_courses_id_fk", - "tableFrom": "course_selections", - "tableTo": "elective_courses", - "columnsFrom": [ - "course_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_selections_student_id_users_id_fk": { - "name": "course_selections_student_id_users_id_fk", - "tableFrom": "course_selections", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_selections_id": { - "name": "course_selections_id", - "columns": [ - "id" - ] - }, - "course_selections_course_id_student_id_pk": { - "name": "course_selections_course_id_student_id_pk", - "columns": [ - "course_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "data_change_logs": { - "name": "data_change_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "table_name": { - "name": "table_name", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "record_id": { - "name": "record_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('create','update','delete')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "old_value": { - "name": "old_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_value": { - "name": "new_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "changed_by": { - "name": "changed_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "changed_by_name": { - "name": "changed_by_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "data_change_logs_table_name_idx": { - "name": "data_change_logs_table_name_idx", - "columns": [ - "table_name" - ], - "isUnique": false - }, - "data_change_logs_record_id_idx": { - "name": "data_change_logs_record_id_idx", - "columns": [ - "record_id" - ], - "isUnique": false - }, - "data_change_logs_action_idx": { - "name": "data_change_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "data_change_logs_changed_by_idx": { - "name": "data_change_logs_changed_by_idx", - "columns": [ - "changed_by" - ], - "isUnique": false - }, - "data_change_logs_created_at_idx": { - "name": "data_change_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "data_change_logs_id": { - "name": "data_change_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "departments": { - "name": "departments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "departments_name_idx": { - "name": "departments_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "departments_id": { - "name": "departments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "departments_name_unique": { - "name": "departments_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "elective_courses": { - "name": "elective_courses", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "enrolled_count": { - "name": "enrolled_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "classroom": { - "name": "classroom", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "schedule": { - "name": "schedule", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_start_at": { - "name": "selection_start_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_end_at": { - "name": "selection_end_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('draft','open','closed','cancelled')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "selection_mode": { - "name": "selection_mode", - "type": "enum('fcfs','lottery')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'fcfs'" - }, - "credit": { - "name": "credit", - "type": "decimal(3,1)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'1.0'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "elective_courses_teacher_idx": { - "name": "elective_courses_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "elective_courses_subject_idx": { - "name": "elective_courses_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "elective_courses_grade_idx": { - "name": "elective_courses_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "elective_courses_status_idx": { - "name": "elective_courses_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "elective_courses_subject_id_subjects_id_fk": { - "name": "elective_courses_subject_id_subjects_id_fk", - "tableFrom": "elective_courses", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "elective_courses_teacher_id_users_id_fk": { - "name": "elective_courses_teacher_id_users_id_fk", - "tableFrom": "elective_courses", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "elective_courses_grade_id_grades_id_fk": { - "name": "elective_courses_grade_id_grades_id_fk", - "tableFrom": "elective_courses", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "elective_courses_id": { - "name": "elective_courses_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_proctoring_events": { - "name": "exam_proctoring_events", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_type": { - "name": "event_type", - "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_detail": { - "name": "event_detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "occurred_at": { - "name": "occurred_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "proctoring_submission_idx": { - "name": "proctoring_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "proctoring_student_idx": { - "name": "proctoring_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "proctoring_exam_idx": { - "name": "proctoring_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "proctoring_event_type_idx": { - "name": "proctoring_event_type_idx", - "columns": [ - "event_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_proctoring_events_submission_id_exam_submissions_id_fk": { - "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_student_id_users_id_fk": { - "name": "exam_proctoring_events_student_id_users_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_exam_id_exams_id_fk": { - "name": "exam_proctoring_events_exam_id_exams_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_proctoring_events_id": { - "name": "exam_proctoring_events_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_questions": { - "name": "exam_questions", - "columns": { - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "exam_questions_exam_id_exams_id_fk": { - "name": "exam_questions_exam_id_exams_id_fk", - "tableFrom": "exam_questions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_questions_question_id_questions_id_fk": { - "name": "exam_questions_question_id_questions_id_fk", - "tableFrom": "exam_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_questions_exam_id_question_id_pk": { - "name": "exam_questions_exam_id_question_id_pk", - "columns": [ - "exam_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_submissions": { - "name": "exam_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exam_student_idx": { - "name": "exam_student_idx", - "columns": [ - "exam_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_submissions_exam_id_exams_id_fk": { - "name": "exam_submissions_exam_id_exams_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_submissions_student_id_users_id_fk": { - "name": "exam_submissions_student_id_users_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_submissions_id": { - "name": "exam_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exams": { - "name": "exams", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "exam_mode": { - "name": "exam_mode", - "type": "enum('homework','timed','proctored')", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'homework'" - }, - "duration_minutes": { - "name": "duration_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "shuffle_questions": { - "name": "shuffle_questions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "allow_late_start": { - "name": "allow_late_start", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "late_start_grace_minutes": { - "name": "late_start_grace_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "anti_cheat_enabled": { - "name": "anti_cheat_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exams_subject_idx": { - "name": "exams_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "exams_grade_idx": { - "name": "exams_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exams_creator_id_users_id_fk": { - "name": "exams_creator_id_users_id_fk", - "tableFrom": "exams", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_subject_id_subjects_id_fk": { - "name": "exams_subject_id_subjects_id_fk", - "tableFrom": "exams", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_grade_id_grades_id_fk": { - "name": "exams_grade_id_grades_id_fk", - "tableFrom": "exams", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exams_id": { - "name": "exams_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "file_attachments": { - "name": "file_attachments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "bigint", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "storage_path": { - "name": "storage_path", - "type": "varchar(512)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "file_attachments_uploader_idx": { - "name": "file_attachments_uploader_idx", - "columns": [ - "uploader_id" - ], - "isUnique": false - }, - "file_attachments_target_idx": { - "name": "file_attachments_target_idx", - "columns": [ - "target_type", - "target_id" - ], - "isUnique": false - }, - "file_attachments_created_at_idx": { - "name": "file_attachments_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "file_attachments_uploader_id_users_id_fk": { - "name": "file_attachments_uploader_id_users_id_fk", - "tableFrom": "file_attachments", - "tableTo": "users", - "columnsFrom": [ - "uploader_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "file_attachments_id": { - "name": "file_attachments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grade_records": { - "name": "grade_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "full_score": { - "name": "full_score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'100'" - }, - "type": { - "name": "type", - "type": "enum('exam','quiz','homework','other')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'exam'" - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grade_records_student_idx": { - "name": "grade_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "grade_records_class_idx": { - "name": "grade_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "grade_records_subject_idx": { - "name": "grade_records_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "grade_records_exam_idx": { - "name": "grade_records_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "grade_records_class_subject_idx": { - "name": "grade_records_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - }, - "grade_records_recorded_by_idx": { - "name": "grade_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "grade_records_student_id_users_id_fk": { - "name": "grade_records_student_id_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_class_id_classes_id_fk": { - "name": "grade_records_class_id_classes_id_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_subject_id_subjects_id_fk": { - "name": "grade_records_subject_id_subjects_id_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_recorded_by_users_id_fk": { - "name": "grade_records_recorded_by_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_c_fk": { - "name": "gr_c_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_s_fk": { - "name": "gr_s_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_sub_fk": { - "name": "gr_sub_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_rb_fk": { - "name": "gr_rb_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grade_records_id": { - "name": "grade_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grades": { - "name": "grades", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "grade_head_id": { - "name": "grade_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teaching_head_id": { - "name": "teaching_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grades_school_idx": { - "name": "grades_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "grades_school_name_uniq": { - "name": "grades_school_name_uniq", - "columns": [ - "school_id", - "name" - ], - "isUnique": false - }, - "grades_grade_head_idx": { - "name": "grades_grade_head_idx", - "columns": [ - "grade_head_id" - ], - "isUnique": false - }, - "grades_teaching_head_idx": { - "name": "grades_teaching_head_idx", - "columns": [ - "teaching_head_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "g_s_fk": { - "name": "g_s_fk", - "tableFrom": "grades", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "g_gh_fk": { - "name": "g_gh_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "grade_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "g_th_fk": { - "name": "g_th_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "teaching_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grades_id": { - "name": "grades_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_answers": { - "name": "homework_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_answer_submission_idx": { - "name": "hw_answer_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "hw_answer_submission_question_idx": { - "name": "hw_answer_submission_question_idx", - "columns": [ - "submission_id", - "question_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_ans_sub_fk": { - "name": "hw_ans_sub_fk", - "tableFrom": "homework_answers", - "tableTo": "homework_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_ans_q_fk": { - "name": "hw_ans_q_fk", - "tableFrom": "homework_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_answers_id": { - "name": "homework_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_questions": { - "name": "homework_assignment_questions", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "hw_assignment_questions_assignment_idx": { - "name": "hw_assignment_questions_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_aq_a_fk": { - "name": "hw_aq_a_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_aq_q_fk": { - "name": "hw_aq_q_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_questions_assignment_id_question_id_pk": { - "name": "homework_assignment_questions_assignment_id_question_id_pk", - "columns": [ - "assignment_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_targets": { - "name": "homework_assignment_targets", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_targets_assignment_idx": { - "name": "hw_assignment_targets_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - }, - "hw_assignment_targets_student_idx": { - "name": "hw_assignment_targets_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_at_a_fk": { - "name": "hw_at_a_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_at_s_fk": { - "name": "hw_at_s_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_targets_assignment_id_student_id_pk": { - "name": "homework_assignment_targets_assignment_id_student_id_pk", - "columns": [ - "assignment_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignments": { - "name": "homework_assignments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_exam_id": { - "name": "source_exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "available_at": { - "name": "available_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "due_at": { - "name": "due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_late": { - "name": "allow_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "late_due_at": { - "name": "late_due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_attempts": { - "name": "max_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_creator_idx": { - "name": "hw_assignment_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "hw_assignment_source_exam_idx": { - "name": "hw_assignment_source_exam_idx", - "columns": [ - "source_exam_id" - ], - "isUnique": false - }, - "hw_assignment_status_idx": { - "name": "hw_assignment_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_asg_exam_fk": { - "name": "hw_asg_exam_fk", - "tableFrom": "homework_assignments", - "tableTo": "exams", - "columnsFrom": [ - "source_exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_asg_creator_fk": { - "name": "hw_asg_creator_fk", - "tableFrom": "homework_assignments", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignments_id": { - "name": "homework_assignments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_submissions": { - "name": "homework_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "attempt_no": { - "name": "attempt_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "started_at": { - "name": "started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_late": { - "name": "is_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_student_idx": { - "name": "hw_assignment_student_idx", - "columns": [ - "assignment_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_sub_a_fk": { - "name": "hw_sub_a_fk", - "tableFrom": "homework_submissions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_sub_student_fk": { - "name": "hw_sub_student_fk", - "tableFrom": "homework_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_submissions_id": { - "name": "homework_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_mastery": { - "name": "knowledge_point_mastery", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mastery_level": { - "name": "mastery_level", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "total_questions": { - "name": "total_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_questions": { - "name": "correct_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_assessed_at": { - "name": "last_assessed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "mastery_student_idx": { - "name": "mastery_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "mastery_kp_idx": { - "name": "mastery_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "knowledge_point_mastery_student_id_users_id_fk": { - "name": "knowledge_point_mastery_student_id_users_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk": { - "name": "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_mastery_id": { - "name": "knowledge_point_mastery_id", - "columns": [ - "id" - ] - }, - "knowledge_point_mastery_student_id_knowledge_point_id_pk": { - "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", - "columns": [ - "student_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_points": { - "name": "knowledge_points", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "anchor_text": { - "name": "anchor_text", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "level": { - "name": "level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "kp_chapter_id_idx": { - "name": "kp_chapter_id_idx", - "columns": [ - "chapter_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "knowledge_points_id": { - "name": "knowledge_points_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "learning_diagnostic_reports": { - "name": "learning_diagnostic_reports", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "generated_by": { - "name": "generated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_type": { - "name": "report_type", - "type": "enum('individual','class','grade')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'individual'" - }, - "period": { - "name": "period", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "summary": { - "name": "summary", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "strengths": { - "name": "strengths", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "weaknesses": { - "name": "weaknesses", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recommendations": { - "name": "recommendations", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "overall_score": { - "name": "overall_score", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_status": { - "name": "report_status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "diagnostic_student_idx": { - "name": "diagnostic_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "diagnostic_generated_by_idx": { - "name": "diagnostic_generated_by_idx", - "columns": [ - "generated_by" - ], - "isUnique": false - }, - "diagnostic_status_idx": { - "name": "diagnostic_status_idx", - "columns": [ - "report_status" - ], - "isUnique": false - }, - "diagnostic_report_type_idx": { - "name": "diagnostic_report_type_idx", - "columns": [ - "report_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "learning_diagnostic_reports_student_id_users_id_fk": { - "name": "learning_diagnostic_reports_student_id_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "learning_diagnostic_reports_generated_by_users_id_fk": { - "name": "learning_diagnostic_reports_generated_by_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "generated_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "learning_diagnostic_reports_id": { - "name": "learning_diagnostic_reports_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_templates": { - "name": "lesson_plan_templates", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "blocks": { - "name": "blocks", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lpt_type_creator_idx": { - "name": "lpt_type_creator_idx", - "columns": [ - "type", - "creator_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_templates_creator_id_users_id_fk": { - "name": "lesson_plan_templates_creator_id_users_id_fk", - "tableFrom": "lesson_plan_templates", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_templates_id": { - "name": "lesson_plan_templates_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_versions": { - "name": "lesson_plan_versions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "version_no": { - "name": "version_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_auto": { - "name": "is_auto", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "lpv_plan_version_idx": { - "name": "lpv_plan_version_idx", - "columns": [ - "plan_id", - "version_no" - ], - "isUnique": false - }, - "lpv_plan_created_idx": { - "name": "lpv_plan_created_idx", - "columns": [ - "plan_id", - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_versions_plan_id_lesson_plans_id_fk": { - "name": "lesson_plan_versions_plan_id_lesson_plans_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "lesson_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "lesson_plan_versions_creator_id_users_id_fk": { - "name": "lesson_plan_versions_creator_id_users_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_versions_id": { - "name": "lesson_plan_versions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plans": { - "name": "lesson_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "course_plan_item_id": { - "name": "course_plan_item_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_id": { - "name": "template_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_name": { - "name": "template_name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_saved_at": { - "name": "last_saved_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lp_creator_idx": { - "name": "lp_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "lp_status_idx": { - "name": "lp_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "lp_textbook_chapter_idx": { - "name": "lp_textbook_chapter_idx", - "columns": [ - "textbook_id", - "chapter_id" - ], - "isUnique": false - }, - "lp_subject_grade_idx": { - "name": "lp_subject_grade_idx", - "columns": [ - "subject_id", - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plans_textbook_id_textbooks_id_fk": { - "name": "lesson_plans_textbook_id_textbooks_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_chapter_id_chapters_id_fk": { - "name": "lesson_plans_chapter_id_chapters_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "chapters", - "columnsFrom": [ - "chapter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_subject_id_subjects_id_fk": { - "name": "lesson_plans_subject_id_subjects_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_grade_id_grades_id_fk": { - "name": "lesson_plans_grade_id_grades_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_creator_id_users_id_fk": { - "name": "lesson_plans_creator_id_users_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plans_id": { - "name": "lesson_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "login_logs": { - "name": "login_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_email": { - "name": "user_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('signin','signout','signup')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "login_logs_user_id_idx": { - "name": "login_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "login_logs_user_email_idx": { - "name": "login_logs_user_email_idx", - "columns": [ - "user_email" - ], - "isUnique": false - }, - "login_logs_action_idx": { - "name": "login_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "login_logs_status_idx": { - "name": "login_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "login_logs_created_at_idx": { - "name": "login_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "login_logs_id": { - "name": "login_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "message_notifications": { - "name": "message_notifications", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "link": { - "name": "link", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "message_notifications_user_idx": { - "name": "message_notifications_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "message_notifications_is_read_idx": { - "name": "message_notifications_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "message_notifications_user_read_idx": { - "name": "message_notifications_user_read_idx", - "columns": [ - "user_id", - "is_read" - ], - "isUnique": false - }, - "message_notifications_created_at_idx": { - "name": "message_notifications_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "message_notifications_user_id_users_id_fk": { - "name": "message_notifications_user_id_users_id_fk", - "tableFrom": "message_notifications", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "message_notifications_id": { - "name": "message_notifications_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "sender_id": { - "name": "sender_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "receiver_id": { - "name": "receiver_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "read_at": { - "name": "read_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_message_id": { - "name": "parent_message_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "sender_deleted_at": { - "name": "sender_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "receiver_deleted_at": { - "name": "receiver_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "messages_sender_idx": { - "name": "messages_sender_idx", - "columns": [ - "sender_id" - ], - "isUnique": false - }, - "messages_receiver_idx": { - "name": "messages_receiver_idx", - "columns": [ - "receiver_id" - ], - "isUnique": false - }, - "messages_is_read_idx": { - "name": "messages_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "messages_parent_idx": { - "name": "messages_parent_idx", - "columns": [ - "parent_message_id" - ], - "isUnique": false - }, - "messages_receiver_read_idx": { - "name": "messages_receiver_read_idx", - "columns": [ - "receiver_id", - "is_read" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_sender_id_users_id_fk": { - "name": "messages_sender_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "sender_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_receiver_id_users_id_fk": { - "name": "messages_receiver_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "receiver_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "messages_id": { - "name": "messages_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "notification_preferences": { - "name": "notification_preferences", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_enabled": { - "name": "email_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "sms_enabled": { - "name": "sms_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "push_enabled": { - "name": "push_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "homework_notifications": { - "name": "homework_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "grade_notifications": { - "name": "grade_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "announcement_notifications": { - "name": "announcement_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "message_notifications": { - "name": "message_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "attendance_notifications": { - "name": "attendance_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "quiet_hours_enabled": { - "name": "quiet_hours_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "quiet_hours_start": { - "name": "quiet_hours_start", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "quiet_hours_end": { - "name": "quiet_hours_end", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "notification_preferences_user_idx": { - "name": "notification_preferences_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "notification_preferences_user_id_users_id_fk": { - "name": "notification_preferences_user_id_users_id_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "np_u_fk": { - "name": "np_u_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "notification_preferences_id": { - "name": "notification_preferences_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "notification_preferences_user_id_unique": { - "name": "notification_preferences_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "parent_student_relations": { - "name": "parent_student_relations", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "relation": { - "name": "relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "parent_student_relations_parent_idx": { - "name": "parent_student_relations_parent_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "parent_student_relations_student_idx": { - "name": "parent_student_relations_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "parent_student_relations_parent_id_users_id_fk": { - "name": "parent_student_relations_parent_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parent_student_relations_student_id_users_id_fk": { - "name": "parent_student_relations_student_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_p_fk": { - "name": "psr_p_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_s_fk": { - "name": "psr_s_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "parent_student_relations_id": { - "name": "parent_student_relations_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "password_security": { - "name": "password_security", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "failed_login_attempts": { - "name": "failed_login_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "locked_until": { - "name": "locked_until", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "must_change_password": { - "name": "must_change_password", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "last_password_change": { - "name": "last_password_change", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "password_security_user_idx": { - "name": "password_security_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "password_security_user_id_users_id_fk": { - "name": "password_security_user_id_users_id_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ps_u_fk": { - "name": "ps_u_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "password_security_id": { - "name": "password_security_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "password_security_user_id_unique": { - "name": "password_security_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "questions": { - "name": "questions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('single_choice','multiple_choice','text','judgment','composite')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "difficulty": { - "name": "difficulty", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "author_id_idx": { - "name": "author_id_idx", - "columns": [ - "author_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "questions_author_id_users_id_fk": { - "name": "questions_author_id_users_id_fk", - "tableFrom": "questions", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_id": { - "name": "questions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "questions_to_knowledge_points": { - "name": "questions_to_knowledge_points", - "columns": { - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "kp_idx": { - "name": "kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "q_kp_qid_fk": { - "name": "q_kp_qid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "q_kp_kpid_fk": { - "name": "q_kp_kpid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_to_knowledge_points_question_id_knowledge_point_id_pk": { - "name": "questions_to_knowledge_points_question_id_knowledge_point_id_pk", - "columns": [ - "question_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "role_permissions": { - "name": "role_permissions", - "columns": { - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "permission": { - "name": "permission", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "role_permissions_role_idx": { - "name": "role_permissions_role_idx", - "columns": [ - "role_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "role_permissions_role_id_roles_id_fk": { - "name": "role_permissions_role_id_roles_id_fk", - "tableFrom": "role_permissions", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "role_permissions_role_id_permission_pk": { - "name": "role_permissions_role_id_permission_pk", - "columns": [ - "role_id", - "permission" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "roles_id": { - "name": "roles_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "schedule_changes": { - "name": "schedule_changes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_schedule_id": { - "name": "original_schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_teacher_id": { - "name": "original_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "substitute_teacher_id": { - "name": "substitute_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_date": { - "name": "original_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_date": { - "name": "new_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_start_time": { - "name": "new_start_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_end_time": { - "name": "new_end_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('pending','approved','rejected','completed')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "requested_by": { - "name": "requested_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "approved_by": { - "name": "approved_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schedule_changes_class_idx": { - "name": "schedule_changes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "schedule_changes_status_idx": { - "name": "schedule_changes_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "schedule_changes_requested_by_idx": { - "name": "schedule_changes_requested_by_idx", - "columns": [ - "requested_by" - ], - "isUnique": false - }, - "schedule_changes_original_schedule_idx": { - "name": "schedule_changes_original_schedule_idx", - "columns": [ - "original_schedule_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schedule_changes_id": { - "name": "schedule_changes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "scheduling_rules": { - "name": "scheduling_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_daily_hours": { - "name": "max_daily_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 8 - }, - "max_continuous_hours": { - "name": "max_continuous_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "lunch_break_start": { - "name": "lunch_break_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'12:00'" - }, - "lunch_break_end": { - "name": "lunch_break_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'13:00'" - }, - "morning_start": { - "name": "morning_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'08:00'" - }, - "afternoon_end": { - "name": "afternoon_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'17:00'" - }, - "avoid_back_to_back": { - "name": "avoid_back_to_back", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "balanced_subjects": { - "name": "balanced_subjects", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "scheduling_rules_class_idx": { - "name": "scheduling_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "scheduling_rules_id": { - "name": "scheduling_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "schools": { - "name": "schools", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schools_name_idx": { - "name": "schools_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "schools_code_idx": { - "name": "schools_code_idx", - "columns": [ - "code" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schools_id": { - "name": "schools_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "schools_name_unique": { - "name": "schools_name_unique", - "columns": [ - "name" - ] - }, - "schools_code_unique": { - "name": "schools_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "sessions": { - "name": "sessions", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "sessions_userId_users_id_fk": { - "name": "sessions_userId_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "sessions_sessionToken": { - "name": "sessions_sessionToken", - "columns": [ - "sessionToken" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "subjects": { - "name": "subjects", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "subjects_name_idx": { - "name": "subjects_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "subjects_id": { - "name": "subjects_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "subjects_name_unique": { - "name": "subjects_name_unique", - "columns": [ - "name" - ] - }, - "subjects_code_unique": { - "name": "subjects_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "submission_answers": { - "name": "submission_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "submission_idx": { - "name": "submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "submission_answers_submission_id_exam_submissions_id_fk": { - "name": "submission_answers_submission_id_exam_submissions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "submission_answers_question_id_questions_id_fk": { - "name": "submission_answers_question_id_questions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "submission_answers_id": { - "name": "submission_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "system_settings": { - "name": "system_settings", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "category": { - "name": "category", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "key": { - "name": "key", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value_type": { - "name": "value_type", - "type": "varchar(20)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'string'" - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ss_category_key_idx": { - "name": "ss_category_key_idx", - "columns": [ - "category", - "key" - ], - "isUnique": true - }, - "ss_category_idx": { - "name": "ss_category_idx", - "columns": [ - "category" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "system_settings_id": { - "name": "system_settings_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "textbooks": { - "name": "textbooks", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "publisher": { - "name": "publisher", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "textbooks_id": { - "name": "textbooks_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "phone": { - "name": "phone", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "address": { - "name": "address", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gender": { - "name": "gender", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "age": { - "name": "age", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "department_id": { - "name": "department_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "onboarded_at": { - "name": "onboarded_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_name": { - "name": "guardian_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_phone": { - "name": "guardian_phone", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_relation": { - "name": "guardian_relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consent_accepted_at": { - "name": "consent_accepted_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": false - }, - "users_grade_id_idx": { - "name": "users_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "users_department_id_idx": { - "name": "users_department_id_idx", - "columns": [ - "department_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "users_id": { - "name": "users_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "columns": [ - "email" - ] - } - }, - "checkConstraint": {} - }, - "users_to_roles": { - "name": "users_to_roles", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "users_to_roles_user_id_users_id_fk": { - "name": "users_to_roles_user_id_users_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "users_to_roles_role_id_roles_id_fk": { - "name": "users_to_roles_role_id_roles_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "users_to_roles_user_id_role_id_pk": { - "name": "users_to_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "verificationTokens": { - "name": "verificationTokens", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verificationTokens_identifier_token_pk": { - "name": "verificationTokens_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - } - }, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {}, - "indexes": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/0004_snapshot.json b/drizzle/meta/0004_snapshot.json deleted file mode 100644 index 9785c7a..0000000 --- a/drizzle/meta/0004_snapshot.json +++ /dev/null @@ -1,7644 +0,0 @@ -{ - "version": "5", - "dialect": "mysql", - "id": "02a713ce-ad34-49a0-8256-c99a7d751758", - "prevId": "6fe72813-5ec3-4b06-a7d1-a475e3a06ddf", - "tables": { - "academic_years": { - "name": "academic_years", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_active": { - "name": "is_active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "academic_years_name_idx": { - "name": "academic_years_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "academic_years_active_idx": { - "name": "academic_years_active_idx", - "columns": [ - "is_active" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "academic_years_id": { - "name": "academic_years_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "academic_years_name_unique": { - "name": "academic_years_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "accounts": { - "name": "accounts", - "columns": { - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "accounts_userId_users_id_fk": { - "name": "accounts_userId_users_id_fk", - "tableFrom": "accounts", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "accounts_provider_providerAccountId_pk": { - "name": "accounts_provider_providerAccountId_pk", - "columns": [ - "provider", - "providerAccountId" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "ai_providers": { - "name": "ai_providers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "base_url": { - "name": "base_url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_encrypted": { - "name": "api_key_encrypted", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_last4": { - "name": "api_key_last4", - "type": "varchar(4)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ai_provider_idx": { - "name": "ai_provider_idx", - "columns": [ - "provider" - ], - "isUnique": false - }, - "ai_provider_default_idx": { - "name": "ai_provider_default_idx", - "columns": [ - "is_default" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "ai_providers_id": { - "name": "ai_providers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "announcements": { - "name": "announcements", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('school','grade','class')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'school'" - }, - "status": { - "name": "status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "target_grade_id": { - "name": "target_grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_class_id": { - "name": "target_class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "published_at": { - "name": "published_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "announcements_author_idx": { - "name": "announcements_author_idx", - "columns": [ - "author_id" - ], - "isUnique": false - }, - "announcements_status_idx": { - "name": "announcements_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "announcements_type_idx": { - "name": "announcements_type_idx", - "columns": [ - "type" - ], - "isUnique": false - }, - "announcements_target_grade_idx": { - "name": "announcements_target_grade_idx", - "columns": [ - "target_grade_id" - ], - "isUnique": false - }, - "announcements_target_class_idx": { - "name": "announcements_target_class_idx", - "columns": [ - "target_class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "announcements_author_id_users_id_fk": { - "name": "announcements_author_id_users_id_fk", - "tableFrom": "announcements", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "announcements_id": { - "name": "announcements_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_records": { - "name": "attendance_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "schedule_id": { - "name": "schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_records_student_idx": { - "name": "attendance_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "attendance_records_class_idx": { - "name": "attendance_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "attendance_records_date_idx": { - "name": "attendance_records_date_idx", - "columns": [ - "date" - ], - "isUnique": false - }, - "attendance_records_class_date_idx": { - "name": "attendance_records_class_date_idx", - "columns": [ - "class_id", - "date" - ], - "isUnique": false - }, - "attendance_records_student_date_idx": { - "name": "attendance_records_student_date_idx", - "columns": [ - "student_id", - "date" - ], - "isUnique": false - }, - "attendance_records_schedule_idx": { - "name": "attendance_records_schedule_idx", - "columns": [ - "schedule_id" - ], - "isUnique": false - }, - "attendance_records_recorded_by_idx": { - "name": "attendance_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_records_student_id_users_id_fk": { - "name": "attendance_records_student_id_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_class_id_classes_id_fk": { - "name": "attendance_records_class_id_classes_id_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_recorded_by_users_id_fk": { - "name": "attendance_records_recorded_by_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_c_fk": { - "name": "ar_c_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_s_fk": { - "name": "ar_s_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_rb_fk": { - "name": "ar_rb_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_records_id": { - "name": "attendance_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_rules": { - "name": "attendance_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "late_threshold_minutes": { - "name": "late_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "early_leave_threshold_minutes": { - "name": "early_leave_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "enable_auto_mark": { - "name": "enable_auto_mark", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_rules_class_idx": { - "name": "attendance_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_rules_class_id_classes_id_fk": { - "name": "attendance_rules_class_id_classes_id_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "atr_c_fk": { - "name": "atr_c_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_rules_id": { - "name": "attendance_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "audit_logs": { - "name": "audit_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_name": { - "name": "user_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "module": { - "name": "module", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "detail": { - "name": "detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "audit_logs_user_id_idx": { - "name": "audit_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "audit_logs_module_idx": { - "name": "audit_logs_module_idx", - "columns": [ - "module" - ], - "isUnique": false - }, - "audit_logs_action_idx": { - "name": "audit_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "audit_logs_status_idx": { - "name": "audit_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "audit_logs_created_at_idx": { - "name": "audit_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "audit_logs_id": { - "name": "audit_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "chapters": { - "name": "chapters", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "textbook_idx": { - "name": "textbook_idx", - "columns": [ - "textbook_id" - ], - "isUnique": false - }, - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "chapters_textbook_id_textbooks_id_fk": { - "name": "chapters_textbook_id_textbooks_id_fk", - "tableFrom": "chapters", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "chapters_id": { - "name": "chapters_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_enrollments": { - "name": "class_enrollments", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_enrollment_status": { - "name": "class_enrollment_status", - "type": "enum('active','inactive')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "class_enrollments_class_idx": { - "name": "class_enrollments_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_enrollments_student_idx": { - "name": "class_enrollments_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "ce_c_fk": { - "name": "ce_c_fk", - "tableFrom": "class_enrollments", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ce_s_fk": { - "name": "ce_s_fk", - "tableFrom": "class_enrollments", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_enrollments_class_id_student_id_pk": { - "name": "class_enrollments_class_id_student_id_pk", - "columns": [ - "class_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_invitation_codes": { - "name": "class_invitation_codes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(8)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_invitation_code_status": { - "name": "class_invitation_code_status", - "type": "enum('active','disabled','expired','exhausted')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "max_uses": { - "name": "max_uses", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "used_count": { - "name": "used_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - }, - "revoked_at": { - "name": "revoked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "revoked_by": { - "name": "revoked_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "note": { - "name": "note", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "class_invitation_codes_code_idx": { - "name": "class_invitation_codes_code_idx", - "columns": [ - "code" - ], - "isUnique": true - }, - "class_invitation_codes_class_idx": { - "name": "class_invitation_codes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_invitation_codes_status_expires_idx": { - "name": "class_invitation_codes_status_expires_idx", - "columns": [ - "class_invitation_code_status", - "expires_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_invitation_codes_class_id_classes_id_fk": { - "name": "class_invitation_codes_class_id_classes_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "class_invitation_codes_created_by_users_id_fk": { - "name": "class_invitation_codes_created_by_users_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cic_c_fk": { - "name": "cic_c_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_invitation_codes_id": { - "name": "class_invitation_codes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "class_invitation_codes_code_unique": { - "name": "class_invitation_codes_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "class_schedule": { - "name": "class_schedule", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "weekday": { - "name": "weekday", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course": { - "name": "course", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "location": { - "name": "location", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_schedule_class_idx": { - "name": "class_schedule_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_schedule_class_day_idx": { - "name": "class_schedule_class_day_idx", - "columns": [ - "class_id", - "weekday" - ], - "isUnique": false - } - }, - "foreignKeys": { - "cs_c_fk": { - "name": "cs_c_fk", - "tableFrom": "class_schedule", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_schedule_id": { - "name": "class_schedule_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_subject_teachers": { - "name": "class_subject_teachers", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_subject_teachers_class_idx": { - "name": "class_subject_teachers_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_subject_teachers_teacher_idx": { - "name": "class_subject_teachers_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "class_subject_teachers_subject_id_idx": { - "name": "class_subject_teachers_subject_id_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_subject_teachers_teacher_id_users_id_fk": { - "name": "class_subject_teachers_teacher_id_users_id_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "cst_c_fk": { - "name": "cst_c_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cst_s_fk": { - "name": "cst_s_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_subject_teachers_class_id_subject_id_pk": { - "name": "class_subject_teachers_class_id_subject_id_pk", - "columns": [ - "class_id", - "subject_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "classes": { - "name": "classes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_name": { - "name": "school_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "homeroom": { - "name": "homeroom", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "room": { - "name": "room", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "invitation_code": { - "name": "invitation_code", - "type": "varchar(6)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classes_teacher_idx": { - "name": "classes_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "classes_grade_idx": { - "name": "classes_grade_idx", - "columns": [ - "grade" - ], - "isUnique": false - }, - "classes_school_idx": { - "name": "classes_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "classes_grade_id_idx": { - "name": "classes_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "classes_teacher_id_users_id_fk": { - "name": "classes_teacher_id_users_id_fk", - "tableFrom": "classes", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "c_s_fk": { - "name": "c_s_fk", - "tableFrom": "classes", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "c_g_fk": { - "name": "c_g_fk", - "tableFrom": "classes", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "classes_id": { - "name": "classes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classes_invitation_code_unique": { - "name": "classes_invitation_code_unique", - "columns": [ - "invitation_code" - ] - } - }, - "checkConstraint": {} - }, - "classrooms": { - "name": "classrooms", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "building": { - "name": "building", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "floor": { - "name": "floor", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classrooms_name_idx": { - "name": "classrooms_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "classrooms_id": { - "name": "classrooms_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classrooms_name_unique": { - "name": "classrooms_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "course_plan_items": { - "name": "course_plan_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "week": { - "name": "week", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hours": { - "name": "hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "textbook_chapter": { - "name": "textbook_chapter", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "notes": { - "name": "notes", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_completed": { - "name": "is_completed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "completed_at": { - "name": "completed_at", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plan_items_plan_idx": { - "name": "course_plan_items_plan_idx", - "columns": [ - "plan_id" - ], - "isUnique": false - }, - "course_plan_items_plan_week_idx": { - "name": "course_plan_items_plan_week_idx", - "columns": [ - "plan_id", - "week" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plan_items_plan_id_course_plans_id_fk": { - "name": "course_plan_items_plan_id_course_plans_id_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cpi_p_fk": { - "name": "cpi_p_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plan_items_id": { - "name": "course_plan_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_plans": { - "name": "course_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "total_hours": { - "name": "total_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "completed_hours": { - "name": "completed_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "weekly_hours": { - "name": "weekly_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "syllabus": { - "name": "syllabus", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "objectives": { - "name": "objectives", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('planning','active','completed','paused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'planning'" - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plans_class_idx": { - "name": "course_plans_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "course_plans_teacher_idx": { - "name": "course_plans_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "course_plans_subject_idx": { - "name": "course_plans_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "course_plans_status_idx": { - "name": "course_plans_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "course_plans_class_subject_idx": { - "name": "course_plans_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plans_class_id_classes_id_fk": { - "name": "course_plans_class_id_classes_id_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_subject_id_subjects_id_fk": { - "name": "course_plans_subject_id_subjects_id_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_teacher_id_users_id_fk": { - "name": "course_plans_teacher_id_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_created_by_users_id_fk": { - "name": "course_plans_created_by_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_c_fk": { - "name": "cp_c_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_s_fk": { - "name": "cp_s_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_t_fk": { - "name": "cp_t_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_cb_fk": { - "name": "cp_cb_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plans_id": { - "name": "course_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_selections": { - "name": "course_selections", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course_id": { - "name": "course_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "selection_status": { - "name": "selection_status", - "type": "enum('selected','enrolled','waitlist','dropped','rejected')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'selected'" - }, - "priority": { - "name": "priority", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "selected_at": { - "name": "selected_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "enrolled_at": { - "name": "enrolled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dropped_at": { - "name": "dropped_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "lottery_rank": { - "name": "lottery_rank", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_selections_course_idx": { - "name": "course_selections_course_idx", - "columns": [ - "course_id" - ], - "isUnique": false - }, - "course_selections_student_idx": { - "name": "course_selections_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "course_selections_status_idx": { - "name": "course_selections_status_idx", - "columns": [ - "selection_status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_selections_course_id_elective_courses_id_fk": { - "name": "course_selections_course_id_elective_courses_id_fk", - "tableFrom": "course_selections", - "tableTo": "elective_courses", - "columnsFrom": [ - "course_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_selections_student_id_users_id_fk": { - "name": "course_selections_student_id_users_id_fk", - "tableFrom": "course_selections", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_selections_id": { - "name": "course_selections_id", - "columns": [ - "id" - ] - }, - "course_selections_course_id_student_id_pk": { - "name": "course_selections_course_id_student_id_pk", - "columns": [ - "course_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "data_change_logs": { - "name": "data_change_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "table_name": { - "name": "table_name", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "record_id": { - "name": "record_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('create','update','delete')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "old_value": { - "name": "old_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_value": { - "name": "new_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "changed_by": { - "name": "changed_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "changed_by_name": { - "name": "changed_by_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "data_change_logs_table_name_idx": { - "name": "data_change_logs_table_name_idx", - "columns": [ - "table_name" - ], - "isUnique": false - }, - "data_change_logs_record_id_idx": { - "name": "data_change_logs_record_id_idx", - "columns": [ - "record_id" - ], - "isUnique": false - }, - "data_change_logs_action_idx": { - "name": "data_change_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "data_change_logs_changed_by_idx": { - "name": "data_change_logs_changed_by_idx", - "columns": [ - "changed_by" - ], - "isUnique": false - }, - "data_change_logs_created_at_idx": { - "name": "data_change_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "data_change_logs_id": { - "name": "data_change_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "departments": { - "name": "departments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "departments_name_idx": { - "name": "departments_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "departments_id": { - "name": "departments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "departments_name_unique": { - "name": "departments_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "elective_courses": { - "name": "elective_courses", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "enrolled_count": { - "name": "enrolled_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "classroom": { - "name": "classroom", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "schedule": { - "name": "schedule", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_start_at": { - "name": "selection_start_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_end_at": { - "name": "selection_end_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('draft','open','closed','cancelled')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "selection_mode": { - "name": "selection_mode", - "type": "enum('fcfs','lottery')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'fcfs'" - }, - "credit": { - "name": "credit", - "type": "decimal(3,1)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'1.0'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "elective_courses_teacher_idx": { - "name": "elective_courses_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "elective_courses_subject_idx": { - "name": "elective_courses_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "elective_courses_grade_idx": { - "name": "elective_courses_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "elective_courses_status_idx": { - "name": "elective_courses_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "elective_courses_subject_id_subjects_id_fk": { - "name": "elective_courses_subject_id_subjects_id_fk", - "tableFrom": "elective_courses", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "elective_courses_teacher_id_users_id_fk": { - "name": "elective_courses_teacher_id_users_id_fk", - "tableFrom": "elective_courses", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "elective_courses_grade_id_grades_id_fk": { - "name": "elective_courses_grade_id_grades_id_fk", - "tableFrom": "elective_courses", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "elective_courses_id": { - "name": "elective_courses_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_proctoring_events": { - "name": "exam_proctoring_events", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_type": { - "name": "event_type", - "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_detail": { - "name": "event_detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "occurred_at": { - "name": "occurred_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "proctoring_submission_idx": { - "name": "proctoring_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "proctoring_student_idx": { - "name": "proctoring_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "proctoring_exam_idx": { - "name": "proctoring_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "proctoring_event_type_idx": { - "name": "proctoring_event_type_idx", - "columns": [ - "event_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_proctoring_events_submission_id_exam_submissions_id_fk": { - "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_student_id_users_id_fk": { - "name": "exam_proctoring_events_student_id_users_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_exam_id_exams_id_fk": { - "name": "exam_proctoring_events_exam_id_exams_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_proctoring_events_id": { - "name": "exam_proctoring_events_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_questions": { - "name": "exam_questions", - "columns": { - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "exam_questions_exam_id_exams_id_fk": { - "name": "exam_questions_exam_id_exams_id_fk", - "tableFrom": "exam_questions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_questions_question_id_questions_id_fk": { - "name": "exam_questions_question_id_questions_id_fk", - "tableFrom": "exam_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_questions_exam_id_question_id_pk": { - "name": "exam_questions_exam_id_question_id_pk", - "columns": [ - "exam_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_submissions": { - "name": "exam_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exam_student_idx": { - "name": "exam_student_idx", - "columns": [ - "exam_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_submissions_exam_id_exams_id_fk": { - "name": "exam_submissions_exam_id_exams_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_submissions_student_id_users_id_fk": { - "name": "exam_submissions_student_id_users_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_submissions_id": { - "name": "exam_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exams": { - "name": "exams", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "exam_mode": { - "name": "exam_mode", - "type": "enum('homework','timed','proctored')", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'homework'" - }, - "duration_minutes": { - "name": "duration_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "shuffle_questions": { - "name": "shuffle_questions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "allow_late_start": { - "name": "allow_late_start", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "late_start_grace_minutes": { - "name": "late_start_grace_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "anti_cheat_enabled": { - "name": "anti_cheat_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exams_subject_idx": { - "name": "exams_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "exams_grade_idx": { - "name": "exams_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exams_creator_id_users_id_fk": { - "name": "exams_creator_id_users_id_fk", - "tableFrom": "exams", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_subject_id_subjects_id_fk": { - "name": "exams_subject_id_subjects_id_fk", - "tableFrom": "exams", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_grade_id_grades_id_fk": { - "name": "exams_grade_id_grades_id_fk", - "tableFrom": "exams", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exams_id": { - "name": "exams_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "file_attachments": { - "name": "file_attachments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "bigint", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "storage_path": { - "name": "storage_path", - "type": "varchar(512)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "file_attachments_uploader_idx": { - "name": "file_attachments_uploader_idx", - "columns": [ - "uploader_id" - ], - "isUnique": false - }, - "file_attachments_target_idx": { - "name": "file_attachments_target_idx", - "columns": [ - "target_type", - "target_id" - ], - "isUnique": false - }, - "file_attachments_created_at_idx": { - "name": "file_attachments_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "file_attachments_uploader_id_users_id_fk": { - "name": "file_attachments_uploader_id_users_id_fk", - "tableFrom": "file_attachments", - "tableTo": "users", - "columnsFrom": [ - "uploader_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "file_attachments_id": { - "name": "file_attachments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grade_records": { - "name": "grade_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "full_score": { - "name": "full_score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'100'" - }, - "type": { - "name": "type", - "type": "enum('exam','quiz','homework','other')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'exam'" - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grade_records_student_idx": { - "name": "grade_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "grade_records_class_idx": { - "name": "grade_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "grade_records_subject_idx": { - "name": "grade_records_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "grade_records_exam_idx": { - "name": "grade_records_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "grade_records_class_subject_idx": { - "name": "grade_records_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - }, - "grade_records_recorded_by_idx": { - "name": "grade_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "grade_records_student_id_users_id_fk": { - "name": "grade_records_student_id_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_class_id_classes_id_fk": { - "name": "grade_records_class_id_classes_id_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_subject_id_subjects_id_fk": { - "name": "grade_records_subject_id_subjects_id_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_recorded_by_users_id_fk": { - "name": "grade_records_recorded_by_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_c_fk": { - "name": "gr_c_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_s_fk": { - "name": "gr_s_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_sub_fk": { - "name": "gr_sub_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_rb_fk": { - "name": "gr_rb_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grade_records_id": { - "name": "grade_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grades": { - "name": "grades", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "grade_head_id": { - "name": "grade_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teaching_head_id": { - "name": "teaching_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grades_school_idx": { - "name": "grades_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "grades_school_name_uniq": { - "name": "grades_school_name_uniq", - "columns": [ - "school_id", - "name" - ], - "isUnique": false - }, - "grades_grade_head_idx": { - "name": "grades_grade_head_idx", - "columns": [ - "grade_head_id" - ], - "isUnique": false - }, - "grades_teaching_head_idx": { - "name": "grades_teaching_head_idx", - "columns": [ - "teaching_head_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "g_s_fk": { - "name": "g_s_fk", - "tableFrom": "grades", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "g_gh_fk": { - "name": "g_gh_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "grade_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "g_th_fk": { - "name": "g_th_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "teaching_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grades_id": { - "name": "grades_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_answers": { - "name": "homework_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_answer_submission_idx": { - "name": "hw_answer_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "hw_answer_submission_question_idx": { - "name": "hw_answer_submission_question_idx", - "columns": [ - "submission_id", - "question_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_ans_sub_fk": { - "name": "hw_ans_sub_fk", - "tableFrom": "homework_answers", - "tableTo": "homework_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_ans_q_fk": { - "name": "hw_ans_q_fk", - "tableFrom": "homework_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_answers_id": { - "name": "homework_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_questions": { - "name": "homework_assignment_questions", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "hw_assignment_questions_assignment_idx": { - "name": "hw_assignment_questions_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_aq_a_fk": { - "name": "hw_aq_a_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_aq_q_fk": { - "name": "hw_aq_q_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_questions_assignment_id_question_id_pk": { - "name": "homework_assignment_questions_assignment_id_question_id_pk", - "columns": [ - "assignment_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_targets": { - "name": "homework_assignment_targets", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_targets_assignment_idx": { - "name": "hw_assignment_targets_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - }, - "hw_assignment_targets_student_idx": { - "name": "hw_assignment_targets_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_at_a_fk": { - "name": "hw_at_a_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_at_s_fk": { - "name": "hw_at_s_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_targets_assignment_id_student_id_pk": { - "name": "homework_assignment_targets_assignment_id_student_id_pk", - "columns": [ - "assignment_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignments": { - "name": "homework_assignments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_exam_id": { - "name": "source_exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "available_at": { - "name": "available_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "due_at": { - "name": "due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_late": { - "name": "allow_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "late_due_at": { - "name": "late_due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_attempts": { - "name": "max_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_creator_idx": { - "name": "hw_assignment_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "hw_assignment_source_exam_idx": { - "name": "hw_assignment_source_exam_idx", - "columns": [ - "source_exam_id" - ], - "isUnique": false - }, - "hw_assignment_status_idx": { - "name": "hw_assignment_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_asg_exam_fk": { - "name": "hw_asg_exam_fk", - "tableFrom": "homework_assignments", - "tableTo": "exams", - "columnsFrom": [ - "source_exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_asg_creator_fk": { - "name": "hw_asg_creator_fk", - "tableFrom": "homework_assignments", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignments_id": { - "name": "homework_assignments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_submissions": { - "name": "homework_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "attempt_no": { - "name": "attempt_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "started_at": { - "name": "started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_late": { - "name": "is_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_student_idx": { - "name": "hw_assignment_student_idx", - "columns": [ - "assignment_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_sub_a_fk": { - "name": "hw_sub_a_fk", - "tableFrom": "homework_submissions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_sub_student_fk": { - "name": "hw_sub_student_fk", - "tableFrom": "homework_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_submissions_id": { - "name": "homework_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_mastery": { - "name": "knowledge_point_mastery", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mastery_level": { - "name": "mastery_level", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "total_questions": { - "name": "total_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_questions": { - "name": "correct_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_assessed_at": { - "name": "last_assessed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "mastery_student_idx": { - "name": "mastery_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "mastery_kp_idx": { - "name": "mastery_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "knowledge_point_mastery_student_id_users_id_fk": { - "name": "knowledge_point_mastery_student_id_users_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk": { - "name": "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_mastery_id": { - "name": "knowledge_point_mastery_id", - "columns": [ - "id" - ] - }, - "knowledge_point_mastery_student_id_knowledge_point_id_pk": { - "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", - "columns": [ - "student_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_prerequisites": { - "name": "knowledge_point_prerequisites", - "columns": { - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "prerequisite_kp_id": { - "name": "prerequisite_kp_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "kp_prereq_kp_idx": { - "name": "kp_prereq_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - }, - "kp_prereq_prereq_idx": { - "name": "kp_prereq_prereq_idx", - "columns": [ - "prerequisite_kp_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "kp_prereq_kp_fk": { - "name": "kp_prereq_kp_fk", - "tableFrom": "knowledge_point_prerequisites", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "kp_prereq_prereq_fk": { - "name": "kp_prereq_prereq_fk", - "tableFrom": "knowledge_point_prerequisites", - "tableTo": "knowledge_points", - "columnsFrom": [ - "prerequisite_kp_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_prerequisites_knowledge_point_id_prerequisite_kp_id_pk": { - "name": "knowledge_point_prerequisites_knowledge_point_id_prerequisite_kp_id_pk", - "columns": [ - "knowledge_point_id", - "prerequisite_kp_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_points": { - "name": "knowledge_points", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "anchor_text": { - "name": "anchor_text", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "level": { - "name": "level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "kp_chapter_id_idx": { - "name": "kp_chapter_id_idx", - "columns": [ - "chapter_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "knowledge_points_id": { - "name": "knowledge_points_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "learning_diagnostic_reports": { - "name": "learning_diagnostic_reports", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "generated_by": { - "name": "generated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_type": { - "name": "report_type", - "type": "enum('individual','class','grade')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'individual'" - }, - "period": { - "name": "period", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "summary": { - "name": "summary", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "strengths": { - "name": "strengths", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "weaknesses": { - "name": "weaknesses", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recommendations": { - "name": "recommendations", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "overall_score": { - "name": "overall_score", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_status": { - "name": "report_status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "diagnostic_student_idx": { - "name": "diagnostic_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "diagnostic_generated_by_idx": { - "name": "diagnostic_generated_by_idx", - "columns": [ - "generated_by" - ], - "isUnique": false - }, - "diagnostic_status_idx": { - "name": "diagnostic_status_idx", - "columns": [ - "report_status" - ], - "isUnique": false - }, - "diagnostic_report_type_idx": { - "name": "diagnostic_report_type_idx", - "columns": [ - "report_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "learning_diagnostic_reports_student_id_users_id_fk": { - "name": "learning_diagnostic_reports_student_id_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "learning_diagnostic_reports_generated_by_users_id_fk": { - "name": "learning_diagnostic_reports_generated_by_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "generated_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "learning_diagnostic_reports_id": { - "name": "learning_diagnostic_reports_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_templates": { - "name": "lesson_plan_templates", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "blocks": { - "name": "blocks", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lpt_type_creator_idx": { - "name": "lpt_type_creator_idx", - "columns": [ - "type", - "creator_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_templates_creator_id_users_id_fk": { - "name": "lesson_plan_templates_creator_id_users_id_fk", - "tableFrom": "lesson_plan_templates", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_templates_id": { - "name": "lesson_plan_templates_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_versions": { - "name": "lesson_plan_versions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "version_no": { - "name": "version_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_auto": { - "name": "is_auto", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "lpv_plan_version_idx": { - "name": "lpv_plan_version_idx", - "columns": [ - "plan_id", - "version_no" - ], - "isUnique": false - }, - "lpv_plan_created_idx": { - "name": "lpv_plan_created_idx", - "columns": [ - "plan_id", - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_versions_plan_id_lesson_plans_id_fk": { - "name": "lesson_plan_versions_plan_id_lesson_plans_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "lesson_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "lesson_plan_versions_creator_id_users_id_fk": { - "name": "lesson_plan_versions_creator_id_users_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_versions_id": { - "name": "lesson_plan_versions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plans": { - "name": "lesson_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "course_plan_item_id": { - "name": "course_plan_item_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_id": { - "name": "template_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_name": { - "name": "template_name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_saved_at": { - "name": "last_saved_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lp_creator_idx": { - "name": "lp_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "lp_status_idx": { - "name": "lp_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "lp_textbook_chapter_idx": { - "name": "lp_textbook_chapter_idx", - "columns": [ - "textbook_id", - "chapter_id" - ], - "isUnique": false - }, - "lp_subject_grade_idx": { - "name": "lp_subject_grade_idx", - "columns": [ - "subject_id", - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plans_textbook_id_textbooks_id_fk": { - "name": "lesson_plans_textbook_id_textbooks_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_chapter_id_chapters_id_fk": { - "name": "lesson_plans_chapter_id_chapters_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "chapters", - "columnsFrom": [ - "chapter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_subject_id_subjects_id_fk": { - "name": "lesson_plans_subject_id_subjects_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_grade_id_grades_id_fk": { - "name": "lesson_plans_grade_id_grades_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_creator_id_users_id_fk": { - "name": "lesson_plans_creator_id_users_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plans_id": { - "name": "lesson_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "login_logs": { - "name": "login_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_email": { - "name": "user_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('signin','signout','signup')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "login_logs_user_id_idx": { - "name": "login_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "login_logs_user_email_idx": { - "name": "login_logs_user_email_idx", - "columns": [ - "user_email" - ], - "isUnique": false - }, - "login_logs_action_idx": { - "name": "login_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "login_logs_status_idx": { - "name": "login_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "login_logs_created_at_idx": { - "name": "login_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "login_logs_id": { - "name": "login_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "message_notifications": { - "name": "message_notifications", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "link": { - "name": "link", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "message_notifications_user_idx": { - "name": "message_notifications_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "message_notifications_is_read_idx": { - "name": "message_notifications_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "message_notifications_user_read_idx": { - "name": "message_notifications_user_read_idx", - "columns": [ - "user_id", - "is_read" - ], - "isUnique": false - }, - "message_notifications_created_at_idx": { - "name": "message_notifications_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "message_notifications_user_id_users_id_fk": { - "name": "message_notifications_user_id_users_id_fk", - "tableFrom": "message_notifications", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "message_notifications_id": { - "name": "message_notifications_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "sender_id": { - "name": "sender_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "receiver_id": { - "name": "receiver_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "read_at": { - "name": "read_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_message_id": { - "name": "parent_message_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "sender_deleted_at": { - "name": "sender_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "receiver_deleted_at": { - "name": "receiver_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "messages_sender_idx": { - "name": "messages_sender_idx", - "columns": [ - "sender_id" - ], - "isUnique": false - }, - "messages_receiver_idx": { - "name": "messages_receiver_idx", - "columns": [ - "receiver_id" - ], - "isUnique": false - }, - "messages_is_read_idx": { - "name": "messages_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "messages_parent_idx": { - "name": "messages_parent_idx", - "columns": [ - "parent_message_id" - ], - "isUnique": false - }, - "messages_receiver_read_idx": { - "name": "messages_receiver_read_idx", - "columns": [ - "receiver_id", - "is_read" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_sender_id_users_id_fk": { - "name": "messages_sender_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "sender_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_receiver_id_users_id_fk": { - "name": "messages_receiver_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "receiver_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "messages_id": { - "name": "messages_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "notification_preferences": { - "name": "notification_preferences", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_enabled": { - "name": "email_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "sms_enabled": { - "name": "sms_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "push_enabled": { - "name": "push_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "homework_notifications": { - "name": "homework_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "grade_notifications": { - "name": "grade_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "announcement_notifications": { - "name": "announcement_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "message_notifications": { - "name": "message_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "attendance_notifications": { - "name": "attendance_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "quiet_hours_enabled": { - "name": "quiet_hours_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "quiet_hours_start": { - "name": "quiet_hours_start", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "quiet_hours_end": { - "name": "quiet_hours_end", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "notification_preferences_user_idx": { - "name": "notification_preferences_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "notification_preferences_user_id_users_id_fk": { - "name": "notification_preferences_user_id_users_id_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "np_u_fk": { - "name": "np_u_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "notification_preferences_id": { - "name": "notification_preferences_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "notification_preferences_user_id_unique": { - "name": "notification_preferences_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "parent_student_relations": { - "name": "parent_student_relations", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "relation": { - "name": "relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "parent_student_relations_parent_idx": { - "name": "parent_student_relations_parent_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "parent_student_relations_student_idx": { - "name": "parent_student_relations_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "parent_student_relations_parent_id_users_id_fk": { - "name": "parent_student_relations_parent_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parent_student_relations_student_id_users_id_fk": { - "name": "parent_student_relations_student_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_p_fk": { - "name": "psr_p_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_s_fk": { - "name": "psr_s_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "parent_student_relations_id": { - "name": "parent_student_relations_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "password_security": { - "name": "password_security", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "failed_login_attempts": { - "name": "failed_login_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "locked_until": { - "name": "locked_until", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "must_change_password": { - "name": "must_change_password", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "last_password_change": { - "name": "last_password_change", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "password_security_user_idx": { - "name": "password_security_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "password_security_user_id_users_id_fk": { - "name": "password_security_user_id_users_id_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ps_u_fk": { - "name": "ps_u_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "password_security_id": { - "name": "password_security_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "password_security_user_id_unique": { - "name": "password_security_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "questions": { - "name": "questions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('single_choice','multiple_choice','text','judgment','composite')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "difficulty": { - "name": "difficulty", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "author_id_idx": { - "name": "author_id_idx", - "columns": [ - "author_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "questions_author_id_users_id_fk": { - "name": "questions_author_id_users_id_fk", - "tableFrom": "questions", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_id": { - "name": "questions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "questions_to_knowledge_points": { - "name": "questions_to_knowledge_points", - "columns": { - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "kp_idx": { - "name": "kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "q_kp_qid_fk": { - "name": "q_kp_qid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "q_kp_kpid_fk": { - "name": "q_kp_kpid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_to_knowledge_points_question_id_knowledge_point_id_pk": { - "name": "questions_to_knowledge_points_question_id_knowledge_point_id_pk", - "columns": [ - "question_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "role_permissions": { - "name": "role_permissions", - "columns": { - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "permission": { - "name": "permission", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "role_permissions_role_idx": { - "name": "role_permissions_role_idx", - "columns": [ - "role_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "role_permissions_role_id_roles_id_fk": { - "name": "role_permissions_role_id_roles_id_fk", - "tableFrom": "role_permissions", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "role_permissions_role_id_permission_pk": { - "name": "role_permissions_role_id_permission_pk", - "columns": [ - "role_id", - "permission" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "roles_id": { - "name": "roles_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "schedule_changes": { - "name": "schedule_changes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_schedule_id": { - "name": "original_schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_teacher_id": { - "name": "original_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "substitute_teacher_id": { - "name": "substitute_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_date": { - "name": "original_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_date": { - "name": "new_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_start_time": { - "name": "new_start_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_end_time": { - "name": "new_end_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('pending','approved','rejected','completed')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "requested_by": { - "name": "requested_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "approved_by": { - "name": "approved_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schedule_changes_class_idx": { - "name": "schedule_changes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "schedule_changes_status_idx": { - "name": "schedule_changes_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "schedule_changes_requested_by_idx": { - "name": "schedule_changes_requested_by_idx", - "columns": [ - "requested_by" - ], - "isUnique": false - }, - "schedule_changes_original_schedule_idx": { - "name": "schedule_changes_original_schedule_idx", - "columns": [ - "original_schedule_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schedule_changes_id": { - "name": "schedule_changes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "scheduling_rules": { - "name": "scheduling_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_daily_hours": { - "name": "max_daily_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 8 - }, - "max_continuous_hours": { - "name": "max_continuous_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "lunch_break_start": { - "name": "lunch_break_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'12:00'" - }, - "lunch_break_end": { - "name": "lunch_break_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'13:00'" - }, - "morning_start": { - "name": "morning_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'08:00'" - }, - "afternoon_end": { - "name": "afternoon_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'17:00'" - }, - "avoid_back_to_back": { - "name": "avoid_back_to_back", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "balanced_subjects": { - "name": "balanced_subjects", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "scheduling_rules_class_idx": { - "name": "scheduling_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "scheduling_rules_id": { - "name": "scheduling_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "schools": { - "name": "schools", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schools_name_idx": { - "name": "schools_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "schools_code_idx": { - "name": "schools_code_idx", - "columns": [ - "code" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schools_id": { - "name": "schools_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "schools_name_unique": { - "name": "schools_name_unique", - "columns": [ - "name" - ] - }, - "schools_code_unique": { - "name": "schools_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "sessions": { - "name": "sessions", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "sessions_userId_users_id_fk": { - "name": "sessions_userId_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "sessions_sessionToken": { - "name": "sessions_sessionToken", - "columns": [ - "sessionToken" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "subjects": { - "name": "subjects", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "subjects_name_idx": { - "name": "subjects_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "subjects_id": { - "name": "subjects_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "subjects_name_unique": { - "name": "subjects_name_unique", - "columns": [ - "name" - ] - }, - "subjects_code_unique": { - "name": "subjects_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "submission_answers": { - "name": "submission_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "submission_idx": { - "name": "submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "submission_answers_submission_id_exam_submissions_id_fk": { - "name": "submission_answers_submission_id_exam_submissions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "submission_answers_question_id_questions_id_fk": { - "name": "submission_answers_question_id_questions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "submission_answers_id": { - "name": "submission_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "system_settings": { - "name": "system_settings", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "category": { - "name": "category", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "key": { - "name": "key", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value_type": { - "name": "value_type", - "type": "varchar(20)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'string'" - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ss_category_key_idx": { - "name": "ss_category_key_idx", - "columns": [ - "category", - "key" - ], - "isUnique": true - }, - "ss_category_idx": { - "name": "ss_category_idx", - "columns": [ - "category" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "system_settings_id": { - "name": "system_settings_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "textbooks": { - "name": "textbooks", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "publisher": { - "name": "publisher", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "textbooks_id": { - "name": "textbooks_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "phone": { - "name": "phone", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "address": { - "name": "address", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gender": { - "name": "gender", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "age": { - "name": "age", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "department_id": { - "name": "department_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "onboarded_at": { - "name": "onboarded_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_name": { - "name": "guardian_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_phone": { - "name": "guardian_phone", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_relation": { - "name": "guardian_relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consent_accepted_at": { - "name": "consent_accepted_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": false - }, - "users_grade_id_idx": { - "name": "users_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "users_department_id_idx": { - "name": "users_department_id_idx", - "columns": [ - "department_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "users_id": { - "name": "users_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "columns": [ - "email" - ] - } - }, - "checkConstraint": {} - }, - "users_to_roles": { - "name": "users_to_roles", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "users_to_roles_user_id_users_id_fk": { - "name": "users_to_roles_user_id_users_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "users_to_roles_role_id_roles_id_fk": { - "name": "users_to_roles_role_id_roles_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "users_to_roles_user_id_role_id_pk": { - "name": "users_to_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "verificationTokens": { - "name": "verificationTokens", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verificationTokens_identifier_token_pk": { - "name": "verificationTokens_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - } - }, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {}, - "indexes": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/0005_snapshot.json b/drizzle/meta/0005_snapshot.json deleted file mode 100644 index 5f21a28..0000000 --- a/drizzle/meta/0005_snapshot.json +++ /dev/null @@ -1,8001 +0,0 @@ -{ - "version": "5", - "dialect": "mysql", - "id": "299a992b-1810-4c15-ae7d-4b2166660df0", - "prevId": "02a713ce-ad34-49a0-8256-c99a7d751758", - "tables": { - "academic_years": { - "name": "academic_years", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_active": { - "name": "is_active", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "academic_years_name_idx": { - "name": "academic_years_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "academic_years_active_idx": { - "name": "academic_years_active_idx", - "columns": [ - "is_active" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "academic_years_id": { - "name": "academic_years_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "academic_years_name_unique": { - "name": "academic_years_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "accounts": { - "name": "accounts", - "columns": { - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "providerAccountId": { - "name": "providerAccountId", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "accounts_userId_users_id_fk": { - "name": "accounts_userId_users_id_fk", - "tableFrom": "accounts", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "accounts_provider_providerAccountId_pk": { - "name": "accounts_provider_providerAccountId_pk", - "columns": [ - "provider", - "providerAccountId" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "ai_providers": { - "name": "ai_providers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "enum('zhipu','openai','gemini','custom')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "base_url": { - "name": "base_url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "model": { - "name": "model", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_encrypted": { - "name": "api_key_encrypted", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "api_key_last4": { - "name": "api_key_last4", - "type": "varchar(4)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_default": { - "name": "is_default", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ai_provider_idx": { - "name": "ai_provider_idx", - "columns": [ - "provider" - ], - "isUnique": false - }, - "ai_provider_default_idx": { - "name": "ai_provider_default_idx", - "columns": [ - "is_default" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "ai_providers_id": { - "name": "ai_providers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "announcements": { - "name": "announcements", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('school','grade','class')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'school'" - }, - "status": { - "name": "status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "target_grade_id": { - "name": "target_grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_class_id": { - "name": "target_class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "published_at": { - "name": "published_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "announcements_author_idx": { - "name": "announcements_author_idx", - "columns": [ - "author_id" - ], - "isUnique": false - }, - "announcements_status_idx": { - "name": "announcements_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "announcements_type_idx": { - "name": "announcements_type_idx", - "columns": [ - "type" - ], - "isUnique": false - }, - "announcements_target_grade_idx": { - "name": "announcements_target_grade_idx", - "columns": [ - "target_grade_id" - ], - "isUnique": false - }, - "announcements_target_class_idx": { - "name": "announcements_target_class_idx", - "columns": [ - "target_class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "announcements_author_id_users_id_fk": { - "name": "announcements_author_id_users_id_fk", - "tableFrom": "announcements", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "announcements_id": { - "name": "announcements_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_records": { - "name": "attendance_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "schedule_id": { - "name": "schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('present','absent','late','early_leave','excused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_records_student_idx": { - "name": "attendance_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "attendance_records_class_idx": { - "name": "attendance_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "attendance_records_date_idx": { - "name": "attendance_records_date_idx", - "columns": [ - "date" - ], - "isUnique": false - }, - "attendance_records_class_date_idx": { - "name": "attendance_records_class_date_idx", - "columns": [ - "class_id", - "date" - ], - "isUnique": false - }, - "attendance_records_student_date_idx": { - "name": "attendance_records_student_date_idx", - "columns": [ - "student_id", - "date" - ], - "isUnique": false - }, - "attendance_records_schedule_idx": { - "name": "attendance_records_schedule_idx", - "columns": [ - "schedule_id" - ], - "isUnique": false - }, - "attendance_records_recorded_by_idx": { - "name": "attendance_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_records_student_id_users_id_fk": { - "name": "attendance_records_student_id_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_class_id_classes_id_fk": { - "name": "attendance_records_class_id_classes_id_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendance_records_recorded_by_users_id_fk": { - "name": "attendance_records_recorded_by_users_id_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_c_fk": { - "name": "ar_c_fk", - "tableFrom": "attendance_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_s_fk": { - "name": "ar_s_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ar_rb_fk": { - "name": "ar_rb_fk", - "tableFrom": "attendance_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_records_id": { - "name": "attendance_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "attendance_rules": { - "name": "attendance_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "late_threshold_minutes": { - "name": "late_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "early_leave_threshold_minutes": { - "name": "early_leave_threshold_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 15 - }, - "enable_auto_mark": { - "name": "enable_auto_mark", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "attendance_rules_class_idx": { - "name": "attendance_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attendance_rules_class_id_classes_id_fk": { - "name": "attendance_rules_class_id_classes_id_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "atr_c_fk": { - "name": "atr_c_fk", - "tableFrom": "attendance_rules", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "attendance_rules_id": { - "name": "attendance_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "audit_logs": { - "name": "audit_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_name": { - "name": "user_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "module": { - "name": "module", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "detail": { - "name": "detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "audit_logs_user_id_idx": { - "name": "audit_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "audit_logs_module_idx": { - "name": "audit_logs_module_idx", - "columns": [ - "module" - ], - "isUnique": false - }, - "audit_logs_action_idx": { - "name": "audit_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "audit_logs_status_idx": { - "name": "audit_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "audit_logs_created_at_idx": { - "name": "audit_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "audit_logs_id": { - "name": "audit_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "chapters": { - "name": "chapters", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "textbook_idx": { - "name": "textbook_idx", - "columns": [ - "textbook_id" - ], - "isUnique": false - }, - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "chapters_textbook_id_textbooks_id_fk": { - "name": "chapters_textbook_id_textbooks_id_fk", - "tableFrom": "chapters", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "chapters_id": { - "name": "chapters_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_enrollments": { - "name": "class_enrollments", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_enrollment_status": { - "name": "class_enrollment_status", - "type": "enum('active','inactive')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "class_enrollments_class_idx": { - "name": "class_enrollments_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_enrollments_student_idx": { - "name": "class_enrollments_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "ce_c_fk": { - "name": "ce_c_fk", - "tableFrom": "class_enrollments", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ce_s_fk": { - "name": "ce_s_fk", - "tableFrom": "class_enrollments", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_enrollments_class_id_student_id_pk": { - "name": "class_enrollments_class_id_student_id_pk", - "columns": [ - "class_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_invitation_codes": { - "name": "class_invitation_codes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(8)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_invitation_code_status": { - "name": "class_invitation_code_status", - "type": "enum('active','disabled','expired','exhausted')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "max_uses": { - "name": "max_uses", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "used_count": { - "name": "used_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - }, - "revoked_at": { - "name": "revoked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "revoked_by": { - "name": "revoked_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "note": { - "name": "note", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "class_invitation_codes_code_idx": { - "name": "class_invitation_codes_code_idx", - "columns": [ - "code" - ], - "isUnique": true - }, - "class_invitation_codes_class_idx": { - "name": "class_invitation_codes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_invitation_codes_status_expires_idx": { - "name": "class_invitation_codes_status_expires_idx", - "columns": [ - "class_invitation_code_status", - "expires_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_invitation_codes_class_id_classes_id_fk": { - "name": "class_invitation_codes_class_id_classes_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "class_invitation_codes_created_by_users_id_fk": { - "name": "class_invitation_codes_created_by_users_id_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cic_c_fk": { - "name": "cic_c_fk", - "tableFrom": "class_invitation_codes", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_invitation_codes_id": { - "name": "class_invitation_codes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "class_invitation_codes_code_unique": { - "name": "class_invitation_codes_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "class_schedule": { - "name": "class_schedule", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "weekday": { - "name": "weekday", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "varchar(5)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course": { - "name": "course", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "location": { - "name": "location", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_schedule_class_idx": { - "name": "class_schedule_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_schedule_class_day_idx": { - "name": "class_schedule_class_day_idx", - "columns": [ - "class_id", - "weekday" - ], - "isUnique": false - } - }, - "foreignKeys": { - "cs_c_fk": { - "name": "cs_c_fk", - "tableFrom": "class_schedule", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_schedule_id": { - "name": "class_schedule_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "class_subject_teachers": { - "name": "class_subject_teachers", - "columns": { - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "class_subject_teachers_class_idx": { - "name": "class_subject_teachers_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "class_subject_teachers_teacher_idx": { - "name": "class_subject_teachers_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "class_subject_teachers_subject_id_idx": { - "name": "class_subject_teachers_subject_id_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "class_subject_teachers_teacher_id_users_id_fk": { - "name": "class_subject_teachers_teacher_id_users_id_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "cst_c_fk": { - "name": "cst_c_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cst_s_fk": { - "name": "cst_s_fk", - "tableFrom": "class_subject_teachers", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "class_subject_teachers_class_id_subject_id_pk": { - "name": "class_subject_teachers_class_id_subject_id_pk", - "columns": [ - "class_id", - "subject_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "classes": { - "name": "classes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_name": { - "name": "school_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "homeroom": { - "name": "homeroom", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "room": { - "name": "room", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "invitation_code": { - "name": "invitation_code", - "type": "varchar(6)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classes_teacher_idx": { - "name": "classes_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "classes_grade_idx": { - "name": "classes_grade_idx", - "columns": [ - "grade" - ], - "isUnique": false - }, - "classes_school_idx": { - "name": "classes_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "classes_grade_id_idx": { - "name": "classes_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "classes_teacher_id_users_id_fk": { - "name": "classes_teacher_id_users_id_fk", - "tableFrom": "classes", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "c_s_fk": { - "name": "c_s_fk", - "tableFrom": "classes", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "c_g_fk": { - "name": "c_g_fk", - "tableFrom": "classes", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "classes_id": { - "name": "classes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classes_invitation_code_unique": { - "name": "classes_invitation_code_unique", - "columns": [ - "invitation_code" - ] - } - }, - "checkConstraint": {} - }, - "classrooms": { - "name": "classrooms", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "building": { - "name": "building", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "floor": { - "name": "floor", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "classrooms_name_idx": { - "name": "classrooms_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "classrooms_id": { - "name": "classrooms_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "classrooms_name_unique": { - "name": "classrooms_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "course_plan_items": { - "name": "course_plan_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "week": { - "name": "week", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hours": { - "name": "hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 2 - }, - "textbook_chapter": { - "name": "textbook_chapter", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "notes": { - "name": "notes", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_completed": { - "name": "is_completed", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "completed_at": { - "name": "completed_at", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plan_items_plan_idx": { - "name": "course_plan_items_plan_idx", - "columns": [ - "plan_id" - ], - "isUnique": false - }, - "course_plan_items_plan_week_idx": { - "name": "course_plan_items_plan_week_idx", - "columns": [ - "plan_id", - "week" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plan_items_plan_id_course_plans_id_fk": { - "name": "course_plan_items_plan_id_course_plans_id_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cpi_p_fk": { - "name": "cpi_p_fk", - "tableFrom": "course_plan_items", - "tableTo": "course_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plan_items_id": { - "name": "course_plan_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_plans": { - "name": "course_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "total_hours": { - "name": "total_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "completed_hours": { - "name": "completed_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "weekly_hours": { - "name": "weekly_hours", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "syllabus": { - "name": "syllabus", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "objectives": { - "name": "objectives", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('planning','active','completed','paused')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'planning'" - }, - "created_by": { - "name": "created_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_plans_class_idx": { - "name": "course_plans_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "course_plans_teacher_idx": { - "name": "course_plans_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "course_plans_subject_idx": { - "name": "course_plans_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "course_plans_status_idx": { - "name": "course_plans_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "course_plans_class_subject_idx": { - "name": "course_plans_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_plans_class_id_classes_id_fk": { - "name": "course_plans_class_id_classes_id_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_subject_id_subjects_id_fk": { - "name": "course_plans_subject_id_subjects_id_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_teacher_id_users_id_fk": { - "name": "course_plans_teacher_id_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_plans_created_by_users_id_fk": { - "name": "course_plans_created_by_users_id_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_c_fk": { - "name": "cp_c_fk", - "tableFrom": "course_plans", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_s_fk": { - "name": "cp_s_fk", - "tableFrom": "course_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_t_fk": { - "name": "cp_t_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "cp_cb_fk": { - "name": "cp_cb_fk", - "tableFrom": "course_plans", - "tableTo": "users", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_plans_id": { - "name": "course_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "course_selections": { - "name": "course_selections", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "course_id": { - "name": "course_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "selection_status": { - "name": "selection_status", - "type": "enum('selected','enrolled','waitlist','dropped','rejected')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'selected'" - }, - "priority": { - "name": "priority", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "selected_at": { - "name": "selected_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "enrolled_at": { - "name": "enrolled_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dropped_at": { - "name": "dropped_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "lottery_rank": { - "name": "lottery_rank", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "course_selections_course_idx": { - "name": "course_selections_course_idx", - "columns": [ - "course_id" - ], - "isUnique": false - }, - "course_selections_student_idx": { - "name": "course_selections_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "course_selections_status_idx": { - "name": "course_selections_status_idx", - "columns": [ - "selection_status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "course_selections_course_id_elective_courses_id_fk": { - "name": "course_selections_course_id_elective_courses_id_fk", - "tableFrom": "course_selections", - "tableTo": "elective_courses", - "columnsFrom": [ - "course_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "course_selections_student_id_users_id_fk": { - "name": "course_selections_student_id_users_id_fk", - "tableFrom": "course_selections", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "course_selections_id": { - "name": "course_selections_id", - "columns": [ - "id" - ] - }, - "course_selections_course_id_student_id_pk": { - "name": "course_selections_course_id_student_id_pk", - "columns": [ - "course_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "data_change_logs": { - "name": "data_change_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "table_name": { - "name": "table_name", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "record_id": { - "name": "record_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('create','update','delete')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "old_value": { - "name": "old_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_value": { - "name": "new_value", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "changed_by": { - "name": "changed_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "changed_by_name": { - "name": "changed_by_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "data_change_logs_table_name_idx": { - "name": "data_change_logs_table_name_idx", - "columns": [ - "table_name" - ], - "isUnique": false - }, - "data_change_logs_record_id_idx": { - "name": "data_change_logs_record_id_idx", - "columns": [ - "record_id" - ], - "isUnique": false - }, - "data_change_logs_action_idx": { - "name": "data_change_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "data_change_logs_changed_by_idx": { - "name": "data_change_logs_changed_by_idx", - "columns": [ - "changed_by" - ], - "isUnique": false - }, - "data_change_logs_created_at_idx": { - "name": "data_change_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "data_change_logs_id": { - "name": "data_change_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "departments": { - "name": "departments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "departments_name_idx": { - "name": "departments_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "departments_id": { - "name": "departments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "departments_name_unique": { - "name": "departments_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "elective_courses": { - "name": "elective_courses", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teacher_id": { - "name": "teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "capacity": { - "name": "capacity", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "enrolled_count": { - "name": "enrolled_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "classroom": { - "name": "classroom", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "schedule": { - "name": "schedule", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_start_at": { - "name": "selection_start_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "selection_end_at": { - "name": "selection_end_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('draft','open','closed','cancelled')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "selection_mode": { - "name": "selection_mode", - "type": "enum('fcfs','lottery')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'fcfs'" - }, - "credit": { - "name": "credit", - "type": "decimal(3,1)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'1.0'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "elective_courses_teacher_idx": { - "name": "elective_courses_teacher_idx", - "columns": [ - "teacher_id" - ], - "isUnique": false - }, - "elective_courses_subject_idx": { - "name": "elective_courses_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "elective_courses_grade_idx": { - "name": "elective_courses_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "elective_courses_status_idx": { - "name": "elective_courses_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "elective_courses_subject_id_subjects_id_fk": { - "name": "elective_courses_subject_id_subjects_id_fk", - "tableFrom": "elective_courses", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "elective_courses_teacher_id_users_id_fk": { - "name": "elective_courses_teacher_id_users_id_fk", - "tableFrom": "elective_courses", - "tableTo": "users", - "columnsFrom": [ - "teacher_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "elective_courses_grade_id_grades_id_fk": { - "name": "elective_courses_grade_id_grades_id_fk", - "tableFrom": "elective_courses", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "elective_courses_id": { - "name": "elective_courses_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "error_book_items": { - "name": "error_book_items", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_type": { - "name": "source_type", - "type": "enum('exam','homework','manual')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'manual'" - }, - "source_id": { - "name": "source_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "student_answer": { - "name": "student_answer", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "correct_answer": { - "name": "correct_answer", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "knowledge_point_ids": { - "name": "knowledge_point_ids", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_status": { - "name": "error_status", - "type": "enum('new','learning','mastered','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'new'" - }, - "mastery_level": { - "name": "mastery_level", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "next_review_at": { - "name": "next_review_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "review_interval": { - "name": "review_interval", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "review_count": { - "name": "review_count", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_streak": { - "name": "correct_streak", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "note": { - "name": "note", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_tags": { - "name": "error_tags", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "eb_item_student_idx": { - "name": "eb_item_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "eb_item_student_status_idx": { - "name": "eb_item_student_status_idx", - "columns": [ - "student_id", - "error_status" - ], - "isUnique": false - }, - "eb_item_student_review_idx": { - "name": "eb_item_student_review_idx", - "columns": [ - "student_id", - "next_review_at" - ], - "isUnique": false - }, - "eb_item_question_idx": { - "name": "eb_item_question_idx", - "columns": [ - "question_id" - ], - "isUnique": false - }, - "eb_item_subject_idx": { - "name": "eb_item_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "eb_item_source_idx": { - "name": "eb_item_source_idx", - "columns": [ - "source_type", - "source_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "error_book_items_student_id_users_id_fk": { - "name": "error_book_items_student_id_users_id_fk", - "tableFrom": "error_book_items", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "error_book_items_question_id_questions_id_fk": { - "name": "error_book_items_question_id_questions_id_fk", - "tableFrom": "error_book_items", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "error_book_items_id": { - "name": "error_book_items_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "error_book_reviews": { - "name": "error_book_reviews", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "item_id": { - "name": "item_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "review_result": { - "name": "review_result", - "type": "enum('again','hard','good','easy')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reviewed_at": { - "name": "reviewed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "new_interval": { - "name": "new_interval", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_mastery_level": { - "name": "new_mastery_level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "eb_review_item_idx": { - "name": "eb_review_item_idx", - "columns": [ - "item_id" - ], - "isUnique": false - }, - "eb_review_student_idx": { - "name": "eb_review_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "eb_review_student_reviewed_idx": { - "name": "eb_review_student_reviewed_idx", - "columns": [ - "student_id", - "reviewed_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "error_book_reviews_item_id_error_book_items_id_fk": { - "name": "error_book_reviews_item_id_error_book_items_id_fk", - "tableFrom": "error_book_reviews", - "tableTo": "error_book_items", - "columnsFrom": [ - "item_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "error_book_reviews_student_id_users_id_fk": { - "name": "error_book_reviews_student_id_users_id_fk", - "tableFrom": "error_book_reviews", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "error_book_reviews_id": { - "name": "error_book_reviews_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_proctoring_events": { - "name": "exam_proctoring_events", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_type": { - "name": "event_type", - "type": "enum('tab_switch','window_blur','copy_attempt','paste_attempt','right_click','devtools_open','fullscreen_exit','idle_timeout')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "event_detail": { - "name": "event_detail", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "occurred_at": { - "name": "occurred_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "proctoring_submission_idx": { - "name": "proctoring_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "proctoring_student_idx": { - "name": "proctoring_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "proctoring_exam_idx": { - "name": "proctoring_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "proctoring_event_type_idx": { - "name": "proctoring_event_type_idx", - "columns": [ - "event_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_proctoring_events_submission_id_exam_submissions_id_fk": { - "name": "exam_proctoring_events_submission_id_exam_submissions_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_student_id_users_id_fk": { - "name": "exam_proctoring_events_student_id_users_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_proctoring_events_exam_id_exams_id_fk": { - "name": "exam_proctoring_events_exam_id_exams_id_fk", - "tableFrom": "exam_proctoring_events", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_proctoring_events_id": { - "name": "exam_proctoring_events_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_questions": { - "name": "exam_questions", - "columns": { - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "exam_questions_exam_id_exams_id_fk": { - "name": "exam_questions_exam_id_exams_id_fk", - "tableFrom": "exam_questions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_questions_question_id_questions_id_fk": { - "name": "exam_questions_question_id_questions_id_fk", - "tableFrom": "exam_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_questions_exam_id_question_id_pk": { - "name": "exam_questions_exam_id_question_id_pk", - "columns": [ - "exam_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exam_submissions": { - "name": "exam_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exam_student_idx": { - "name": "exam_student_idx", - "columns": [ - "exam_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exam_submissions_exam_id_exams_id_fk": { - "name": "exam_submissions_exam_id_exams_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "exams", - "columnsFrom": [ - "exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "exam_submissions_student_id_users_id_fk": { - "name": "exam_submissions_student_id_users_id_fk", - "tableFrom": "exam_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exam_submissions_id": { - "name": "exam_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "exams": { - "name": "exams", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "start_time": { - "name": "start_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "end_time": { - "name": "end_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "exam_mode": { - "name": "exam_mode", - "type": "enum('homework','timed','proctored')", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'homework'" - }, - "duration_minutes": { - "name": "duration_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "shuffle_questions": { - "name": "shuffle_questions", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "allow_late_start": { - "name": "allow_late_start", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "late_start_grace_minutes": { - "name": "late_start_grace_minutes", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "anti_cheat_enabled": { - "name": "anti_cheat_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "exams_subject_idx": { - "name": "exams_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "exams_grade_idx": { - "name": "exams_grade_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "exams_creator_id_users_id_fk": { - "name": "exams_creator_id_users_id_fk", - "tableFrom": "exams", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_subject_id_subjects_id_fk": { - "name": "exams_subject_id_subjects_id_fk", - "tableFrom": "exams", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "exams_grade_id_grades_id_fk": { - "name": "exams_grade_id_grades_id_fk", - "tableFrom": "exams", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "exams_id": { - "name": "exams_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "file_attachments": { - "name": "file_attachments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mime_type": { - "name": "mime_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "bigint", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "storage_path": { - "name": "storage_path", - "type": "varchar(512)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "file_attachments_uploader_idx": { - "name": "file_attachments_uploader_idx", - "columns": [ - "uploader_id" - ], - "isUnique": false - }, - "file_attachments_target_idx": { - "name": "file_attachments_target_idx", - "columns": [ - "target_type", - "target_id" - ], - "isUnique": false - }, - "file_attachments_created_at_idx": { - "name": "file_attachments_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "file_attachments_uploader_id_users_id_fk": { - "name": "file_attachments_uploader_id_users_id_fk", - "tableFrom": "file_attachments", - "tableTo": "users", - "columnsFrom": [ - "uploader_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "file_attachments_id": { - "name": "file_attachments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grade_records": { - "name": "grade_records", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "exam_id": { - "name": "exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "academic_year_id": { - "name": "academic_year_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "full_score": { - "name": "full_score", - "type": "decimal(6,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'100'" - }, - "type": { - "name": "type", - "type": "enum('exam','quiz','homework','other')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'exam'" - }, - "semester": { - "name": "semester", - "type": "enum('1','2')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'1'" - }, - "recorded_by": { - "name": "recorded_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "remark": { - "name": "remark", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grade_records_student_idx": { - "name": "grade_records_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "grade_records_class_idx": { - "name": "grade_records_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "grade_records_subject_idx": { - "name": "grade_records_subject_idx", - "columns": [ - "subject_id" - ], - "isUnique": false - }, - "grade_records_exam_idx": { - "name": "grade_records_exam_idx", - "columns": [ - "exam_id" - ], - "isUnique": false - }, - "grade_records_class_subject_idx": { - "name": "grade_records_class_subject_idx", - "columns": [ - "class_id", - "subject_id" - ], - "isUnique": false - }, - "grade_records_recorded_by_idx": { - "name": "grade_records_recorded_by_idx", - "columns": [ - "recorded_by" - ], - "isUnique": false - } - }, - "foreignKeys": { - "grade_records_student_id_users_id_fk": { - "name": "grade_records_student_id_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_class_id_classes_id_fk": { - "name": "grade_records_class_id_classes_id_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_subject_id_subjects_id_fk": { - "name": "grade_records_subject_id_subjects_id_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "grade_records_recorded_by_users_id_fk": { - "name": "grade_records_recorded_by_users_id_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_c_fk": { - "name": "gr_c_fk", - "tableFrom": "grade_records", - "tableTo": "classes", - "columnsFrom": [ - "class_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_s_fk": { - "name": "gr_s_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_sub_fk": { - "name": "gr_sub_fk", - "tableFrom": "grade_records", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "gr_rb_fk": { - "name": "gr_rb_fk", - "tableFrom": "grade_records", - "tableTo": "users", - "columnsFrom": [ - "recorded_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grade_records_id": { - "name": "grade_records_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "grades": { - "name": "grades", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "school_id": { - "name": "school_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "grade_head_id": { - "name": "grade_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "teaching_head_id": { - "name": "teaching_head_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "grades_school_idx": { - "name": "grades_school_idx", - "columns": [ - "school_id" - ], - "isUnique": false - }, - "grades_school_name_uniq": { - "name": "grades_school_name_uniq", - "columns": [ - "school_id", - "name" - ], - "isUnique": false - }, - "grades_grade_head_idx": { - "name": "grades_grade_head_idx", - "columns": [ - "grade_head_id" - ], - "isUnique": false - }, - "grades_teaching_head_idx": { - "name": "grades_teaching_head_idx", - "columns": [ - "teaching_head_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "g_s_fk": { - "name": "g_s_fk", - "tableFrom": "grades", - "tableTo": "schools", - "columnsFrom": [ - "school_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "g_gh_fk": { - "name": "g_gh_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "grade_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "g_th_fk": { - "name": "g_th_fk", - "tableFrom": "grades", - "tableTo": "users", - "columnsFrom": [ - "teaching_head_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "grades_id": { - "name": "grades_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_answers": { - "name": "homework_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_answer_submission_idx": { - "name": "hw_answer_submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - }, - "hw_answer_submission_question_idx": { - "name": "hw_answer_submission_question_idx", - "columns": [ - "submission_id", - "question_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_ans_sub_fk": { - "name": "hw_ans_sub_fk", - "tableFrom": "homework_answers", - "tableTo": "homework_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_ans_q_fk": { - "name": "hw_ans_q_fk", - "tableFrom": "homework_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_answers_id": { - "name": "homework_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_questions": { - "name": "homework_assignment_questions", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "hw_assignment_questions_assignment_idx": { - "name": "hw_assignment_questions_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_aq_a_fk": { - "name": "hw_aq_a_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_aq_q_fk": { - "name": "hw_aq_q_fk", - "tableFrom": "homework_assignment_questions", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_questions_assignment_id_question_id_pk": { - "name": "homework_assignment_questions_assignment_id_question_id_pk", - "columns": [ - "assignment_id", - "question_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignment_targets": { - "name": "homework_assignment_targets", - "columns": { - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_targets_assignment_idx": { - "name": "hw_assignment_targets_assignment_idx", - "columns": [ - "assignment_id" - ], - "isUnique": false - }, - "hw_assignment_targets_student_idx": { - "name": "hw_assignment_targets_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_at_a_fk": { - "name": "hw_at_a_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_at_s_fk": { - "name": "hw_at_s_fk", - "tableFrom": "homework_assignment_targets", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignment_targets_assignment_id_student_id_pk": { - "name": "homework_assignment_targets_assignment_id_student_id_pk", - "columns": [ - "assignment_id", - "student_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_assignments": { - "name": "homework_assignments", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_exam_id": { - "name": "source_exam_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "structure": { - "name": "structure", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "available_at": { - "name": "available_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "due_at": { - "name": "due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_late": { - "name": "allow_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "late_due_at": { - "name": "late_due_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_attempts": { - "name": "max_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_creator_idx": { - "name": "hw_assignment_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "hw_assignment_source_exam_idx": { - "name": "hw_assignment_source_exam_idx", - "columns": [ - "source_exam_id" - ], - "isUnique": false - }, - "hw_assignment_status_idx": { - "name": "hw_assignment_status_idx", - "columns": [ - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_asg_exam_fk": { - "name": "hw_asg_exam_fk", - "tableFrom": "homework_assignments", - "tableTo": "exams", - "columnsFrom": [ - "source_exam_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_asg_creator_fk": { - "name": "hw_asg_creator_fk", - "tableFrom": "homework_assignments", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_assignments_id": { - "name": "homework_assignments_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "homework_submissions": { - "name": "homework_submissions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "assignment_id": { - "name": "assignment_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "attempt_no": { - "name": "attempt_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'started'" - }, - "started_at": { - "name": "started_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "submitted_at": { - "name": "submitted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_late": { - "name": "is_late", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "hw_assignment_student_idx": { - "name": "hw_assignment_student_idx", - "columns": [ - "assignment_id", - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "hw_sub_a_fk": { - "name": "hw_sub_a_fk", - "tableFrom": "homework_submissions", - "tableTo": "homework_assignments", - "columnsFrom": [ - "assignment_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "hw_sub_student_fk": { - "name": "hw_sub_student_fk", - "tableFrom": "homework_submissions", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "homework_submissions_id": { - "name": "homework_submissions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_mastery": { - "name": "knowledge_point_mastery", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mastery_level": { - "name": "mastery_level", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "total_questions": { - "name": "total_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "correct_questions": { - "name": "correct_questions", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_assessed_at": { - "name": "last_assessed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "mastery_student_idx": { - "name": "mastery_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "mastery_kp_idx": { - "name": "mastery_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "knowledge_point_mastery_student_id_users_id_fk": { - "name": "knowledge_point_mastery_student_id_users_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk": { - "name": "knowledge_point_mastery_knowledge_point_id_knowledge_points_id_fk", - "tableFrom": "knowledge_point_mastery", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_mastery_id": { - "name": "knowledge_point_mastery_id", - "columns": [ - "id" - ] - }, - "knowledge_point_mastery_student_id_knowledge_point_id_pk": { - "name": "knowledge_point_mastery_student_id_knowledge_point_id_pk", - "columns": [ - "student_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_point_prerequisites": { - "name": "knowledge_point_prerequisites", - "columns": { - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "prerequisite_kp_id": { - "name": "prerequisite_kp_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "kp_prereq_kp_idx": { - "name": "kp_prereq_kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - }, - "kp_prereq_prereq_idx": { - "name": "kp_prereq_prereq_idx", - "columns": [ - "prerequisite_kp_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "kp_prereq_kp_fk": { - "name": "kp_prereq_kp_fk", - "tableFrom": "knowledge_point_prerequisites", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "kp_prereq_prereq_fk": { - "name": "kp_prereq_prereq_fk", - "tableFrom": "knowledge_point_prerequisites", - "tableTo": "knowledge_points", - "columnsFrom": [ - "prerequisite_kp_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "knowledge_point_prerequisites_knowledge_point_id_prerequisite_kp_id_pk": { - "name": "knowledge_point_prerequisites_knowledge_point_id_prerequisite_kp_id_pk", - "columns": [ - "knowledge_point_id", - "prerequisite_kp_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "knowledge_points": { - "name": "knowledge_points", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "anchor_text": { - "name": "anchor_text", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "level": { - "name": "level", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "kp_chapter_id_idx": { - "name": "kp_chapter_id_idx", - "columns": [ - "chapter_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "knowledge_points_id": { - "name": "knowledge_points_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "learning_diagnostic_reports": { - "name": "learning_diagnostic_reports", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "generated_by": { - "name": "generated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_type": { - "name": "report_type", - "type": "enum('individual','class','grade')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'individual'" - }, - "period": { - "name": "period", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "summary": { - "name": "summary", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "strengths": { - "name": "strengths", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "weaknesses": { - "name": "weaknesses", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "recommendations": { - "name": "recommendations", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "overall_score": { - "name": "overall_score", - "type": "decimal(5,2)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "report_status": { - "name": "report_status", - "type": "enum('draft','published','archived')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "diagnostic_student_idx": { - "name": "diagnostic_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - }, - "diagnostic_generated_by_idx": { - "name": "diagnostic_generated_by_idx", - "columns": [ - "generated_by" - ], - "isUnique": false - }, - "diagnostic_status_idx": { - "name": "diagnostic_status_idx", - "columns": [ - "report_status" - ], - "isUnique": false - }, - "diagnostic_report_type_idx": { - "name": "diagnostic_report_type_idx", - "columns": [ - "report_type" - ], - "isUnique": false - } - }, - "foreignKeys": { - "learning_diagnostic_reports_student_id_users_id_fk": { - "name": "learning_diagnostic_reports_student_id_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "learning_diagnostic_reports_generated_by_users_id_fk": { - "name": "learning_diagnostic_reports_generated_by_users_id_fk", - "tableFrom": "learning_diagnostic_reports", - "tableTo": "users", - "columnsFrom": [ - "generated_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "learning_diagnostic_reports_id": { - "name": "learning_diagnostic_reports_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_templates": { - "name": "lesson_plan_templates", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "blocks": { - "name": "blocks", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lpt_type_creator_idx": { - "name": "lpt_type_creator_idx", - "columns": [ - "type", - "creator_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_templates_creator_id_users_id_fk": { - "name": "lesson_plan_templates_creator_id_users_id_fk", - "tableFrom": "lesson_plan_templates", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_templates_id": { - "name": "lesson_plan_templates_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plan_versions": { - "name": "lesson_plan_versions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "plan_id": { - "name": "plan_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "version_no": { - "name": "version_no", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_auto": { - "name": "is_auto", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "lpv_plan_version_idx": { - "name": "lpv_plan_version_idx", - "columns": [ - "plan_id", - "version_no" - ], - "isUnique": false - }, - "lpv_plan_created_idx": { - "name": "lpv_plan_created_idx", - "columns": [ - "plan_id", - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plan_versions_plan_id_lesson_plans_id_fk": { - "name": "lesson_plan_versions_plan_id_lesson_plans_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "lesson_plans", - "columnsFrom": [ - "plan_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "lesson_plan_versions_creator_id_users_id_fk": { - "name": "lesson_plan_versions_creator_id_users_id_fk", - "tableFrom": "lesson_plan_versions", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plan_versions_id": { - "name": "lesson_plan_versions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "lesson_plans": { - "name": "lesson_plans", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "textbook_id": { - "name": "textbook_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "chapter_id": { - "name": "chapter_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "course_plan_item_id": { - "name": "course_plan_item_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "subject_id": { - "name": "subject_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_id": { - "name": "template_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "template_name": { - "name": "template_name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'draft'" - }, - "creator_id": { - "name": "creator_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_saved_at": { - "name": "last_saved_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "lp_creator_idx": { - "name": "lp_creator_idx", - "columns": [ - "creator_id" - ], - "isUnique": false - }, - "lp_status_idx": { - "name": "lp_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "lp_textbook_chapter_idx": { - "name": "lp_textbook_chapter_idx", - "columns": [ - "textbook_id", - "chapter_id" - ], - "isUnique": false - }, - "lp_subject_grade_idx": { - "name": "lp_subject_grade_idx", - "columns": [ - "subject_id", - "grade_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "lesson_plans_textbook_id_textbooks_id_fk": { - "name": "lesson_plans_textbook_id_textbooks_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "textbooks", - "columnsFrom": [ - "textbook_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_chapter_id_chapters_id_fk": { - "name": "lesson_plans_chapter_id_chapters_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "chapters", - "columnsFrom": [ - "chapter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_subject_id_subjects_id_fk": { - "name": "lesson_plans_subject_id_subjects_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "subjects", - "columnsFrom": [ - "subject_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_grade_id_grades_id_fk": { - "name": "lesson_plans_grade_id_grades_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "grades", - "columnsFrom": [ - "grade_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "lesson_plans_creator_id_users_id_fk": { - "name": "lesson_plans_creator_id_users_id_fk", - "tableFrom": "lesson_plans", - "tableTo": "users", - "columnsFrom": [ - "creator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "lesson_plans_id": { - "name": "lesson_plans_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "login_logs": { - "name": "login_logs", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_email": { - "name": "user_email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "action": { - "name": "action", - "type": "enum('signin','signout','signup')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('success','failure')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'success'" - }, - "ip_address": { - "name": "ip_address", - "type": "varchar(45)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "login_logs_user_id_idx": { - "name": "login_logs_user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "login_logs_user_email_idx": { - "name": "login_logs_user_email_idx", - "columns": [ - "user_email" - ], - "isUnique": false - }, - "login_logs_action_idx": { - "name": "login_logs_action_idx", - "columns": [ - "action" - ], - "isUnique": false - }, - "login_logs_status_idx": { - "name": "login_logs_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "login_logs_created_at_idx": { - "name": "login_logs_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "login_logs_id": { - "name": "login_logs_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "message_notifications": { - "name": "message_notifications", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "link": { - "name": "link", - "type": "varchar(512)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "message_notifications_user_idx": { - "name": "message_notifications_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "message_notifications_is_read_idx": { - "name": "message_notifications_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "message_notifications_user_read_idx": { - "name": "message_notifications_user_read_idx", - "columns": [ - "user_id", - "is_read" - ], - "isUnique": false - }, - "message_notifications_created_at_idx": { - "name": "message_notifications_created_at_idx", - "columns": [ - "created_at" - ], - "isUnique": false - } - }, - "foreignKeys": { - "message_notifications_user_id_users_id_fk": { - "name": "message_notifications_user_id_users_id_fk", - "tableFrom": "message_notifications", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "message_notifications_id": { - "name": "message_notifications_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "sender_id": { - "name": "sender_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "receiver_id": { - "name": "receiver_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "read_at": { - "name": "read_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "parent_message_id": { - "name": "parent_message_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "sender_deleted_at": { - "name": "sender_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "receiver_deleted_at": { - "name": "receiver_deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "messages_sender_idx": { - "name": "messages_sender_idx", - "columns": [ - "sender_id" - ], - "isUnique": false - }, - "messages_receiver_idx": { - "name": "messages_receiver_idx", - "columns": [ - "receiver_id" - ], - "isUnique": false - }, - "messages_is_read_idx": { - "name": "messages_is_read_idx", - "columns": [ - "is_read" - ], - "isUnique": false - }, - "messages_parent_idx": { - "name": "messages_parent_idx", - "columns": [ - "parent_message_id" - ], - "isUnique": false - }, - "messages_receiver_read_idx": { - "name": "messages_receiver_read_idx", - "columns": [ - "receiver_id", - "is_read" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_sender_id_users_id_fk": { - "name": "messages_sender_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "sender_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_receiver_id_users_id_fk": { - "name": "messages_receiver_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "receiver_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "messages_id": { - "name": "messages_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "notification_preferences": { - "name": "notification_preferences", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_enabled": { - "name": "email_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "sms_enabled": { - "name": "sms_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "push_enabled": { - "name": "push_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "homework_notifications": { - "name": "homework_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "grade_notifications": { - "name": "grade_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "announcement_notifications": { - "name": "announcement_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "message_notifications": { - "name": "message_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "attendance_notifications": { - "name": "attendance_notifications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": true - }, - "quiet_hours_enabled": { - "name": "quiet_hours_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "quiet_hours_start": { - "name": "quiet_hours_start", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "quiet_hours_end": { - "name": "quiet_hours_end", - "type": "varchar(5)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "notification_preferences_user_idx": { - "name": "notification_preferences_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "notification_preferences_user_id_users_id_fk": { - "name": "notification_preferences_user_id_users_id_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "np_u_fk": { - "name": "np_u_fk", - "tableFrom": "notification_preferences", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "notification_preferences_id": { - "name": "notification_preferences_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "notification_preferences_user_id_unique": { - "name": "notification_preferences_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "parent_student_relations": { - "name": "parent_student_relations", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "student_id": { - "name": "student_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "relation": { - "name": "relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - } - }, - "indexes": { - "parent_student_relations_parent_idx": { - "name": "parent_student_relations_parent_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "parent_student_relations_student_idx": { - "name": "parent_student_relations_student_idx", - "columns": [ - "student_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "parent_student_relations_parent_id_users_id_fk": { - "name": "parent_student_relations_parent_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parent_student_relations_student_id_users_id_fk": { - "name": "parent_student_relations_student_id_users_id_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_p_fk": { - "name": "psr_p_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "psr_s_fk": { - "name": "psr_s_fk", - "tableFrom": "parent_student_relations", - "tableTo": "users", - "columnsFrom": [ - "student_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "parent_student_relations_id": { - "name": "parent_student_relations_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "password_security": { - "name": "password_security", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "failed_login_attempts": { - "name": "failed_login_attempts", - "type": "int", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "locked_until": { - "name": "locked_until", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "must_change_password": { - "name": "must_change_password", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "last_password_change": { - "name": "last_password_change", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "password_security_user_idx": { - "name": "password_security_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "password_security_user_id_users_id_fk": { - "name": "password_security_user_id_users_id_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "ps_u_fk": { - "name": "ps_u_fk", - "tableFrom": "password_security", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "password_security_id": { - "name": "password_security_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "password_security_user_id_unique": { - "name": "password_security_user_id_unique", - "columns": [ - "user_id" - ] - } - }, - "checkConstraint": {} - }, - "questions": { - "name": "questions", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "json", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "enum('single_choice','multiple_choice','text','judgment','composite')", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "difficulty": { - "name": "difficulty", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "parent_id": { - "name": "parent_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "author_id": { - "name": "author_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "parent_id_idx": { - "name": "parent_id_idx", - "columns": [ - "parent_id" - ], - "isUnique": false - }, - "author_id_idx": { - "name": "author_id_idx", - "columns": [ - "author_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "questions_author_id_users_id_fk": { - "name": "questions_author_id_users_id_fk", - "tableFrom": "questions", - "tableTo": "users", - "columnsFrom": [ - "author_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_id": { - "name": "questions_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "questions_to_knowledge_points": { - "name": "questions_to_knowledge_points", - "columns": { - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "knowledge_point_id": { - "name": "knowledge_point_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "kp_idx": { - "name": "kp_idx", - "columns": [ - "knowledge_point_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "q_kp_qid_fk": { - "name": "q_kp_qid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "q_kp_kpid_fk": { - "name": "q_kp_kpid_fk", - "tableFrom": "questions_to_knowledge_points", - "tableTo": "knowledge_points", - "columnsFrom": [ - "knowledge_point_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "questions_to_knowledge_points_question_id_knowledge_point_id_pk": { - "name": "questions_to_knowledge_points_question_id_knowledge_point_id_pk", - "columns": [ - "question_id", - "knowledge_point_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "role_permissions": { - "name": "role_permissions", - "columns": { - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "permission": { - "name": "permission", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "role_permissions_role_idx": { - "name": "role_permissions_role_idx", - "columns": [ - "role_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "role_permissions_role_id_roles_id_fk": { - "name": "role_permissions_role_id_roles_id_fk", - "tableFrom": "role_permissions", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "role_permissions_role_id_permission_pk": { - "name": "role_permissions_role_id_permission_pk", - "columns": [ - "role_id", - "permission" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "roles_id": { - "name": "roles_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "roles_name_unique": { - "name": "roles_name_unique", - "columns": [ - "name" - ] - } - }, - "checkConstraint": {} - }, - "schedule_changes": { - "name": "schedule_changes", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_schedule_id": { - "name": "original_schedule_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_teacher_id": { - "name": "original_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "substitute_teacher_id": { - "name": "substitute_teacher_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_date": { - "name": "original_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_date": { - "name": "new_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_start_time": { - "name": "new_start_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "new_end_time": { - "name": "new_end_time", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "enum('pending','approved','rejected','completed')", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "requested_by": { - "name": "requested_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "approved_by": { - "name": "approved_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schedule_changes_class_idx": { - "name": "schedule_changes_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - }, - "schedule_changes_status_idx": { - "name": "schedule_changes_status_idx", - "columns": [ - "status" - ], - "isUnique": false - }, - "schedule_changes_requested_by_idx": { - "name": "schedule_changes_requested_by_idx", - "columns": [ - "requested_by" - ], - "isUnique": false - }, - "schedule_changes_original_schedule_idx": { - "name": "schedule_changes_original_schedule_idx", - "columns": [ - "original_schedule_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schedule_changes_id": { - "name": "schedule_changes_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "scheduling_rules": { - "name": "scheduling_rules", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "class_id": { - "name": "class_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "max_daily_hours": { - "name": "max_daily_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 8 - }, - "max_continuous_hours": { - "name": "max_continuous_hours", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "lunch_break_start": { - "name": "lunch_break_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'12:00'" - }, - "lunch_break_end": { - "name": "lunch_break_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'13:00'" - }, - "morning_start": { - "name": "morning_start", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'08:00'" - }, - "afternoon_end": { - "name": "afternoon_end", - "type": "varchar(10)", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'17:00'" - }, - "avoid_back_to_back": { - "name": "avoid_back_to_back", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": false - }, - "balanced_subjects": { - "name": "balanced_subjects", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "scheduling_rules_class_idx": { - "name": "scheduling_rules_class_idx", - "columns": [ - "class_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "scheduling_rules_id": { - "name": "scheduling_rules_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "schools": { - "name": "schools", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "schools_name_idx": { - "name": "schools_name_idx", - "columns": [ - "name" - ], - "isUnique": false - }, - "schools_code_idx": { - "name": "schools_code_idx", - "columns": [ - "code" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "schools_id": { - "name": "schools_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "schools_name_unique": { - "name": "schools_name_unique", - "columns": [ - "name" - ] - }, - "schools_code_unique": { - "name": "schools_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "sessions": { - "name": "sessions", - "columns": { - "sessionToken": { - "name": "sessionToken", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "userId": { - "name": "userId", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "userId" - ], - "isUnique": false - } - }, - "foreignKeys": { - "sessions_userId_users_id_fk": { - "name": "sessions_userId_users_id_fk", - "tableFrom": "sessions", - "tableTo": "users", - "columnsFrom": [ - "userId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "sessions_sessionToken": { - "name": "sessions_sessionToken", - "columns": [ - "sessionToken" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "subjects": { - "name": "subjects", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "code": { - "name": "code", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "order": { - "name": "order", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "subjects_name_idx": { - "name": "subjects_name_idx", - "columns": [ - "name" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "subjects_id": { - "name": "subjects_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "subjects_name_unique": { - "name": "subjects_name_unique", - "columns": [ - "name" - ] - }, - "subjects_code_unique": { - "name": "subjects_code_unique", - "columns": [ - "code" - ] - } - }, - "checkConstraint": {} - }, - "submission_answers": { - "name": "submission_answers", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "submission_id": { - "name": "submission_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "question_id": { - "name": "question_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "answer_content": { - "name": "answer_content", - "type": "json", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "score": { - "name": "score", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "feedback": { - "name": "feedback", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "submission_idx": { - "name": "submission_idx", - "columns": [ - "submission_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "submission_answers_submission_id_exam_submissions_id_fk": { - "name": "submission_answers_submission_id_exam_submissions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "exam_submissions", - "columnsFrom": [ - "submission_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "submission_answers_question_id_questions_id_fk": { - "name": "submission_answers_question_id_questions_id_fk", - "tableFrom": "submission_answers", - "tableTo": "questions", - "columnsFrom": [ - "question_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "submission_answers_id": { - "name": "submission_answers_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "system_settings": { - "name": "system_settings", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "category": { - "name": "category", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "key": { - "name": "key", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value_type": { - "name": "value_type", - "type": "varchar(20)", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'string'" - }, - "updated_by": { - "name": "updated_by", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "ss_category_key_idx": { - "name": "ss_category_key_idx", - "columns": [ - "category", - "key" - ], - "isUnique": true - }, - "ss_category_idx": { - "name": "ss_category_idx", - "columns": [ - "category" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "system_settings_id": { - "name": "system_settings_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "textbooks": { - "name": "textbooks", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "subject": { - "name": "subject", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "grade": { - "name": "grade", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "publisher": { - "name": "publisher", - "type": "varchar(100)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "textbooks_id": { - "name": "textbooks_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emailVerified": { - "name": "emailVerified", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "phone": { - "name": "phone", - "type": "varchar(30)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "address": { - "name": "address", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gender": { - "name": "gender", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "age": { - "name": "age", - "type": "int", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "grade_id": { - "name": "grade_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "department_id": { - "name": "department_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "onboarded_at": { - "name": "onboarded_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_name": { - "name": "guardian_name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_phone": { - "name": "guardian_phone", - "type": "varchar(20)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guardian_relation": { - "name": "guardian_relation", - "type": "varchar(50)", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consent_accepted_at": { - "name": "consent_accepted_at", - "type": "datetime", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(now())" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "onUpdate": true, - "default": "(now())" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": false - }, - "users_grade_id_idx": { - "name": "users_grade_id_idx", - "columns": [ - "grade_id" - ], - "isUnique": false - }, - "users_department_id_idx": { - "name": "users_department_id_idx", - "columns": [ - "department_id" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": { - "users_id": { - "name": "users_id", - "columns": [ - "id" - ] - } - }, - "uniqueConstraints": { - "users_email_unique": { - "name": "users_email_unique", - "columns": [ - "email" - ] - } - }, - "checkConstraint": {} - }, - "users_to_roles": { - "name": "users_to_roles", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "varchar(128)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "user_id_idx": { - "name": "user_id_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "users_to_roles_user_id_users_id_fk": { - "name": "users_to_roles_user_id_users_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "users_to_roles_role_id_roles_id_fk": { - "name": "users_to_roles_role_id_roles_id_fk", - "tableFrom": "users_to_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "users_to_roles_user_id_role_id_pk": { - "name": "users_to_roles_user_id_role_id_pk", - "columns": [ - "user_id", - "role_id" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - }, - "verificationTokens": { - "name": "verificationTokens", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires": { - "name": "expires", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verificationTokens_identifier_token_pk": { - "name": "verificationTokens_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {}, - "checkConstraint": {} - } - }, - "views": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "tables": {}, - "indexes": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index c8fda5c..7e833d4 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -5,92 +5,8 @@ { "idx": 0, "version": "5", - "when": 1781676504560, - "tag": "0000_perfect_pestilence", - "breakpoints": true - }, - { - "idx": 1, - "version": "5", - "when": 1781679978738, - "tag": "0001_heavy_sage", - "breakpoints": true - }, - { - "idx": 2, - "version": "5", - "when": 1781789296745, - "tag": "0002_tiny_lionheart", - "breakpoints": true - }, - { - "idx": 3, - "version": "5", - "when": 1782118370256, - "tag": "0003_diagnostic_student_nullable", - "breakpoints": true - }, - { - "idx": 4, - "version": "5", - "when": 1782136411839, - "tag": "0004_calm_sandman", - "breakpoints": true - }, - { - "idx": 5, - "version": "5", - "when": 1782141546400, - "tag": "0005_messy_pride", - "breakpoints": true - }, - { - "idx": 6, - "version": "5", - "when": 1782374400000, - "tag": "0013_message_recall", - "breakpoints": true - }, - { - "idx": 7, - "version": "5", - "when": 1782374500000, - "tag": "0014_message_templates", - "breakpoints": true - }, - { - "idx": 8, - "version": "5", - "when": 1782374600000, - "tag": "0015_group_messages", - "breakpoints": true - }, - { - "idx": 9, - "version": "5", - "when": 1782445200000, - "tag": "0018_attendance_status_reason", - "breakpoints": true - }, - { - "idx": 10, - "version": "5", - "when": 1782448800000, - "tag": "0019_attendance_warning_thresholds", - "breakpoints": true - }, - { - "idx": 11, - "version": "5", - "when": 1782452400000, - "tag": "0020_leave_requests", - "breakpoints": true - }, - { - "idx": 12, - "version": "5", - "when": 1782456000000, - "tag": "0021_attendance_period", + "when": 1783064688766, + "tag": "0000_aberrant_deathstrike", "breakpoints": true } ]