-- ============================================================
-- LMS v3.2 복수 세트(Set) 랜덤 출제 DDL 확장 스크립트
-- Date: 2026-04-07
-- Engine: MySQL 8.x | InnoDB | utf8mb4_unicode_ci
-- 주의: 기존 컬럼 변경 없음. ADD COLUMN / CREATE TABLE만 사용
-- ============================================================

-- ──────────────────────────────────────────────
-- 1. lms_exam_paper: 복수 세트 관련 컬럼 추가
-- ──────────────────────────────────────────────
ALTER TABLE `lms_exam_paper`
  ADD COLUMN `paper_set_no`      INT(3) NOT NULL DEFAULT 1        COMMENT '세트 번호 (0=개인별동적, 1~10=고정세트)' AFTER `paper_name`,
  ADD COLUMN `content_id`        INT(10) NOT NULL DEFAULT 0       COMMENT '연관 차시 ID (진행평가 세트용)' AFTER `paper_set_no`,
  ADD COLUMN `generation_mode`   CHAR(1) NOT NULL DEFAULT 'M'     COMMENT 'M:수동구성 A:자동랜덤 D:개인별동적' AFTER `content_id`,
  ADD COLUMN `shuffle_question`  CHAR(1) NOT NULL DEFAULT 'N'     COMMENT '문항순서 셔플 여부(Y/N)' AFTER `generation_mode`,
  ADD COLUMN `shuffle_choice`    CHAR(1) NOT NULL DEFAULT 'N'     COMMENT '선택지순서 셔플 여부(Y/N)' AFTER `shuffle_question`,
  ADD COLUMN `level_ratio`       VARCHAR(50) NOT NULL DEFAULT ''  COMMENT '난이도 비율 (예: 5:10:5 = 하:중:상)' AFTER `shuffle_choice`,
  ADD COLUMN `type_ratio`        VARCHAR(50) NOT NULL DEFAULT ''  COMMENT '유형 비율 (예: 15:5:0 = 객:주:OX)' AFTER `level_ratio`,
  ADD COLUMN `assigned_count`    INT(5) NOT NULL DEFAULT 0        COMMENT '배정된 학습자 수 (균등배정 추적)' AFTER `type_ratio`;

-- 세트 조회용 인덱스
ALTER TABLE `lms_exam_paper`
  ADD KEY `idx_set_no` (`class_id`, `paper_type`, `paper_set_no`),
  ADD KEY `idx_content_id` (`content_id`);


-- ──────────────────────────────────────────────
-- 2. lms_exam_result: 세트 배정 결과 컬럼 추가
-- ──────────────────────────────────────────────
ALTER TABLE `lms_exam_result`
  ADD COLUMN `assigned_questions` TEXT NULL                        COMMENT '실제 배정 문제 ID (동적생성 시 JSON)' AFTER `answers`,
  ADD COLUMN `shuffle_map`        TEXT NULL                        COMMENT '셔플 매핑 (문항/선택지 순서 JSON)' AFTER `assigned_questions`,
  ADD COLUMN `content_id`         INT(10) NOT NULL DEFAULT 0      COMMENT '연관 차시 ID (진행평가 결과용)' AFTER `shuffle_map`;

ALTER TABLE `lms_exam_result`
  ADD KEY `idx_content_id` (`content_id`);


-- ──────────────────────────────────────────────
-- 3. lms_task_paper: 과제 출제(세트) 테이블 신규 생성
-- ──────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `lms_task_paper` (
  `task_paper_id`         INT(10) NOT NULL AUTO_INCREMENT       COMMENT '과제 출제 고유번호',
  `course_id`             INT(10) NOT NULL                      COMMENT '과정 ID',
  `class_id`              INT(10) NOT NULL DEFAULT 0            COMMENT '차수 ID (0=과정공통)',
  `task_set_no`           INT(3) NOT NULL DEFAULT 1             COMMENT '과제 세트 번호 (1, 2, 3...)',
  `task_no`               INT(3) NOT NULL DEFAULT 1             COMMENT '과제 번호 (1차, 2차)',
  `task_title`            VARCHAR(200) NOT NULL DEFAULT ''      COMMENT '과제 제목',
  `task_description`      LONGTEXT NULL                         COMMENT '과제 설명/지시사항',
  `task_reference_file`   VARCHAR(300) NOT NULL DEFAULT ''      COMMENT '참고자료 첨부파일 경로',
  `task_reference_file_name` VARCHAR(200) NOT NULL DEFAULT ''   COMMENT '참고자료 원본명',
  `score_total`           INT(3) NOT NULL DEFAULT 100           COMMENT '만점 (기본 100)',
  `submit_type`           CHAR(1) NOT NULL DEFAULT 'B'          COMMENT 'T:텍스트 F:파일 B:둘다',
  `use_yn`                CHAR(1) NOT NULL DEFAULT 'Y'          COMMENT '사용여부',
  `assigned_count`        INT(5) NOT NULL DEFAULT 0             COMMENT '배정된 학습자 수',
  `created_by`            INT(10) NOT NULL DEFAULT 0            COMMENT '등록자 관리자 ID',
  `created_at`            DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
  `updated_at`            DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',
  PRIMARY KEY (`task_paper_id`),
  KEY `idx_course_class` (`course_id`, `class_id`),
  KEY `idx_task_set` (`class_id`, `task_no`, `task_set_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='과제 출제(복수 세트) 테이블';


-- ──────────────────────────────────────────────
-- 4. lms_task: 세트 배정 컬럼 추가
-- ──────────────────────────────────────────────
ALTER TABLE `lms_task`
  ADD COLUMN `task_paper_id`     INT(10) NOT NULL DEFAULT 0      COMMENT '배정된 과제출제 ID (lms_task_paper.task_paper_id)' AFTER `class_id`;


-- ──────────────────────────────────────────────
-- 5. lms_survey: 관리자용 컬럼 보강
-- ──────────────────────────────────────────────
ALTER TABLE `lms_survey`
  ADD COLUMN `course_id`         INT(10) NOT NULL DEFAULT 0      COMMENT '과정 ID (0=전체공통)' AFTER `survey_id`,
  ADD COLUMN `survey_type`       VARCHAR(20) NOT NULL DEFAULT 'GENERAL' COMMENT 'GENERAL:일반 BIZ:사업주 CARD:내일배움 SAFE:산안교육' AFTER `survey_desc`,
  ADD COLUMN `updated_at`        DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시' AFTER `created_at`;

ALTER TABLE `lms_survey`
  ADD KEY `idx_course_id` (`course_id`);


-- ============================================================
-- 확인용: 변경 후 컬럼 확인
-- ============================================================
-- SHOW COLUMNS FROM lms_exam_paper;
-- SHOW COLUMNS FROM lms_exam_result;
-- SHOW COLUMNS FROM lms_task_paper;
-- SHOW COLUMNS FROM lms_task;
-- SHOW COLUMNS FROM lms_survey;
