feat: add short IM user numbers
This commit is contained in:
@@ -8,6 +8,53 @@
|
||||
SET NAMES utf8mb4;
|
||||
USE `tinode`;
|
||||
|
||||
-- ============================================================
|
||||
-- 0. User account number.
|
||||
-- account_no is the short user number shown in Admin. The real primary key
|
||||
-- im_users.id remains the internal Tinode/Snowflake user ID.
|
||||
-- Existing users are backfilled from 1000 by created time; new users are
|
||||
-- assigned by IM Server in the user creation transaction.
|
||||
-- ============================================================
|
||||
|
||||
SET @sql := IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'im_users' AND COLUMN_NAME = 'account_no') = 0,
|
||||
'ALTER TABLE `im_users` ADD COLUMN `account_no` int unsigned NOT NULL DEFAULT 0 COMMENT ''用户编号'' AFTER `id`',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @im_user_account_no := (
|
||||
SELECT GREATEST(COALESCE(MAX(`account_no`), 999), 999)
|
||||
FROM `im_users`
|
||||
WHERE `account_no` > 0
|
||||
);
|
||||
|
||||
UPDATE `im_users` AS u
|
||||
JOIN (
|
||||
SELECT ordered.`id`, (@im_user_account_no := @im_user_account_no + 1) AS next_no
|
||||
FROM (
|
||||
SELECT `id`
|
||||
FROM `im_users`
|
||||
WHERE `account_no` = 0
|
||||
ORDER BY `createdat`, `id`
|
||||
) AS ordered
|
||||
) AS seq ON seq.`id` = u.`id`
|
||||
SET u.`account_no` = seq.next_no
|
||||
WHERE u.`account_no` = 0;
|
||||
|
||||
SET @sql := IF(
|
||||
(SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'im_users' AND INDEX_NAME = 'uk_im_users_account_no') = 0,
|
||||
'CREATE UNIQUE INDEX `uk_im_users_account_no` ON `im_users` (`account_no`)',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ============================================================
|
||||
-- 1. Applied runtime policy snapshots.
|
||||
-- policy_type: security, user_policy_groups, sensitive_words.
|
||||
|
||||
Reference in New Issue
Block a user