Files
kefu/im/backend/migrations/019_daily_active_chat_limit.sql
T
2026-08-27 14:04:28 +08:00

35 lines
1.9 KiB
SQL

SET @daily_chat_limit_exists=(SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='membership_plans' AND COLUMN_NAME='daily_active_chat_limit');
SET @daily_chat_limit_sql=IF(@daily_chat_limit_exists=0,'ALTER TABLE membership_plans ADD COLUMN daily_active_chat_limit INT UNSIGNED NOT NULL DEFAULT 20 AFTER duration_days','SELECT 1');
PREPARE daily_chat_limit_stmt FROM @daily_chat_limit_sql;
EXECUTE daily_chat_limit_stmt;
DEALLOCATE PREPARE daily_chat_limit_stmt;
UPDATE membership_plans
SET daily_active_chat_limit=CASE WHEN level>=2 THEN 100 ELSE 20 END
WHERE daily_active_chat_limit=20;
INSERT INTO system_configs(config_key,config_value,value_type,description) VALUES
('membership.free_daily_active_chat_limit','5','integer','普通用户每日可主动聊天的不同用户数,0 表示不限制')
ON DUPLICATE KEY UPDATE description=VALUES(description);
CREATE TABLE IF NOT EXISTS im_daily_active_chat_usage (
user_id BIGINT UNSIGNED NOT NULL,
usage_date DATE NOT NULL,
used_count INT UNSIGNED NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id,usage_date),
KEY idx_daily_chat_usage_date (usage_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS im_daily_active_chat_targets (
user_id BIGINT UNSIGNED NOT NULL,
target_user_id BIGINT UNSIGNED NOT NULL,
usage_date DATE NOT NULL,
conversation_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id,target_user_id,usage_date),
KEY idx_daily_chat_target_date (target_user_id,usage_date),
KEY idx_daily_chat_conversation (conversation_id,created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;