Files
NextEdu/drizzle/0020_leave_requests.sql
SpecialX 365c36d97b feat(db): add migrations for RBAC, diagnostic, messaging, attendance, leave, invitation codes
- 0011: RBAC role flags and seed data

- 0012: diagnostic grade_id

- 0013: message recall

- 0014: message templates

- 0015: group messages and message reports/blocks

- 0016: invitation codes

- 0017: draft device sync

- 0018: attendance status reason

- 0019: attendance warning thresholds

- 0020: leave requests

- 0021: attendance period
2026-07-03 10:23:24 +08:00

54 lines
3.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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'
-- teacherread + 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'
-- parentcreate + 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'
-- studentcreate + 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_headread + 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';