feat(msg): announcements 公告模块 + sendBatch 批量优化 + 权限扩展 + nextstep 文档

This commit is contained in:
SpecialX
2026-07-14 15:57:41 +08:00
parent 7dd5c44406
commit fb23c5234e
28 changed files with 3644 additions and 7 deletions

View File

@@ -138,6 +138,29 @@ CREATE TABLE IF NOT EXISTS `iam_password_history` (
INDEX `idx_iam_password_history_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 1.11 TOTP 2FA 密钥表RFC 6238
CREATE TABLE IF NOT EXISTS `iam_user_totp` (
`id` CHAR(36) NOT NULL,
`user_id` CHAR(36) NOT NULL,
`secret` VARCHAR(128) NOT NULL,
`status` ENUM('pending','active') 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`),
UNIQUE KEY `uniq_iam_user_totp_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 1.12 TOTP 备份码表10 个一次性使用)
CREATE TABLE IF NOT EXISTS `iam_totp_backup_codes` (
`id` CHAR(36) NOT NULL,
`user_id` CHAR(36) NOT NULL,
`code_hash` VARCHAR(255) NOT NULL,
`used_at` TIMESTAMP NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_iam_totp_backup_codes_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- 2. Classes 服务services/classes/src/classes/classes.schema.ts
@@ -607,3 +630,34 @@ CREATE TABLE IF NOT EXISTS `processed_events` (
`processed_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 5.7 公告主表(广播公告,一条对应一个目标受众)
CREATE TABLE IF NOT EXISTS `msg_announcements` (
`id` VARCHAR(32) NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
`status` VARCHAR(32) NOT NULL DEFAULT 'draft',
`is_pinned` BOOLEAN NOT NULL DEFAULT FALSE,
`author_id` VARCHAR(32) NOT NULL,
`target_audience` VARCHAR(32) NOT NULL DEFAULT 'all',
`metadata` JSON NULL,
`published_at` TIMESTAMP NULL,
`archived_at` TIMESTAMP NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_msg_announcements_status` (`status`),
INDEX `idx_msg_announcements_audience` (`target_audience`),
INDEX `idx_msg_announcements_pinned` (`is_pinned`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 5.8 公告已读表(每用户已读跟踪,幂等)
CREATE TABLE IF NOT EXISTS `msg_announcement_reads` (
`id` VARCHAR(32) NOT NULL,
`announcement_id` VARCHAR(32) NOT NULL,
`user_id` VARCHAR(32) NOT NULL,
`read_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_announcement_user` (`announcement_id`, `user_id`),
INDEX `idx_msg_announcement_reads_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;