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
This commit is contained in:
SpecialX
2026-07-03 10:23:24 +08:00
parent 48829bd02b
commit 365c36d97b
13 changed files with 308 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
-- 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';