feat(tkuser): Sprint 001 Section A — 연차/휴가 백엔드 전환 (DB + API)
workers/vacation_balance_details → sso_users/sp_vacation_balances 기반 전환. 부서장 설정, 승인권한 CRUD, vacation_settings 테이블, 장기근속 자동부여, startup migration 추가. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
-- Sprint 001: 연차/휴가 관리 시스템 개선 마이그레이션
|
||||
-- 비파괴적(additive) 변경만 수행
|
||||
-- 실행: 수동 또는 서버 시작 시
|
||||
|
||||
-- ============================================================
|
||||
-- 1. departments에 팀장 컬럼 추가
|
||||
-- ============================================================
|
||||
ALTER TABLE departments
|
||||
ADD COLUMN IF NOT EXISTS leader_user_id INT NULL
|
||||
COMMENT '팀장(부서장) sso_users.user_id';
|
||||
|
||||
-- ============================================================
|
||||
-- 2. dept_approval_authority (부서별 승인권한) 신규
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS dept_approval_authority (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
department_id INT NOT NULL COMMENT '대상 부서',
|
||||
approval_type VARCHAR(50) NOT NULL COMMENT '승인유형 (VACATION, PURCHASE 등)',
|
||||
approver_user_id INT NOT NULL COMMENT '승인자 sso_users.user_id',
|
||||
priority INT DEFAULT 1 COMMENT '승인 순서 (다단계 승인 시)',
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (approver_user_id) REFERENCES sso_users(user_id),
|
||||
UNIQUE KEY uq_dept_type_approver (department_id, approval_type, approver_user_id)
|
||||
) COMMENT '부서별 행정 승인권한 (시스템 접근권한과 별개)';
|
||||
|
||||
-- ============================================================
|
||||
-- 3. vacation_settings (연차 계산 규칙 설정) 신규
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS vacation_settings (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
setting_key VARCHAR(100) NOT NULL UNIQUE,
|
||||
setting_value TEXT NOT NULL,
|
||||
description TEXT,
|
||||
updated_by INT,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (updated_by) REFERENCES sso_users(user_id)
|
||||
) COMMENT '연차 계산 규칙 설정';
|
||||
|
||||
INSERT IGNORE INTO vacation_settings (setting_key, setting_value, description) VALUES
|
||||
('annual_leave_first_year_rule', 'MONTHLY', '1년 미만: MONTHLY(월 1일) / NONE(없음)'),
|
||||
('annual_leave_base_days', '15', '1년차 기본 연차일수'),
|
||||
('annual_leave_increment_per_years', '2', '추가 1일 부여 간격 (년)'),
|
||||
('annual_leave_max_days', '25', '연차 최대 일수'),
|
||||
('long_service_threshold_years', '5', '장기근속 연차 부여 기준 (년)'),
|
||||
('long_service_bonus_days', '3', '장기근속 추가 연차 일수'),
|
||||
('long_service_expiry', 'UNTIL_RESIGN', '장기근속 연차 만료: UNTIL_RESIGN(퇴사까지) / YEARLY(매년)'),
|
||||
('long_service_auto_grant', 'true', '장기근속 연차 자동 부여 여부'),
|
||||
('carry_over_enabled', 'true', '이월연차 허용 여부'),
|
||||
('carry_over_max_days', '0', '이월 최대 일수 (0=무제한)'),
|
||||
('carry_over_expiry_month', '2', '이월연차 사용 기한 (월)');
|
||||
|
||||
-- ============================================================
|
||||
-- 4. sp_vacation_balances 확장 (balance_type, expires_at 추가)
|
||||
-- ============================================================
|
||||
ALTER TABLE sp_vacation_balances
|
||||
ADD COLUMN IF NOT EXISTS balance_type ENUM('AUTO','MANUAL','CARRY_OVER','LONG_SERVICE','COMPANY_GRANT')
|
||||
DEFAULT 'AUTO' COMMENT '부여 유형',
|
||||
ADD COLUMN IF NOT EXISTS expires_at DATE NULL COMMENT '만료일 (NULL=해당연도말)';
|
||||
|
||||
-- UNIQUE KEY 변경: balance_type을 포함하여 같은 user/type/year에 AUTO + LONG_SERVICE 공존 허용
|
||||
-- 기존 UNIQUE KEY 삭제 후 재생성
|
||||
ALTER TABLE sp_vacation_balances
|
||||
DROP INDEX IF EXISTS unique_user_type_year;
|
||||
|
||||
ALTER TABLE sp_vacation_balances
|
||||
ADD UNIQUE KEY unique_user_type_year_btype (user_id, vacation_type_id, year, balance_type);
|
||||
|
||||
-- ============================================================
|
||||
-- 5. sso_users에 장기근속 제외 플래그
|
||||
-- ============================================================
|
||||
ALTER TABLE sso_users
|
||||
ADD COLUMN IF NOT EXISTS long_service_excluded BOOLEAN DEFAULT FALSE
|
||||
COMMENT '장기근속 연차 제외 대상';
|
||||
|
||||
-- ============================================================
|
||||
-- 6. company_holidays (전사 휴가일 관리) 신규
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS company_holidays (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
holiday_date DATE NOT NULL,
|
||||
holiday_name VARCHAR(100) NOT NULL COMMENT '휴가명',
|
||||
holiday_type ENUM('PAID','ANNUAL_DEDUCT') NOT NULL
|
||||
COMMENT 'PAID=유급휴가(회사부여), ANNUAL_DEDUCT=연차차감',
|
||||
description TEXT,
|
||||
created_by INT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (created_by) REFERENCES sso_users(user_id),
|
||||
UNIQUE KEY uq_holiday_date (holiday_date)
|
||||
) COMMENT '전사 휴가일 관리';
|
||||
Reference in New Issue
Block a user