| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- -- =====================================================
- -- Profile Hub: stats cache table + summary projection columns (schema only)
- -- Target: tenant DB (fs_tenant_*)
- -- Data backfill: run apply-lobster-profile-migration-all-tenants.js
- -- =====================================================
- CREATE TABLE IF NOT EXISTS lobster_profile_stats (
- company_id BIGINT NOT NULL PRIMARY KEY COMMENT '0=tenant total, >0=company scope',
- total_profiles BIGINT NOT NULL DEFAULT 0,
- enriched_count BIGINT NOT NULL DEFAULT 0,
- interaction_sum BIGINT NOT NULL DEFAULT 0,
- avg_conversations DECIMAL(10,2) NOT NULL DEFAULT 0,
- active_today BIGINT NOT NULL DEFAULT 0,
- refresh_time DATETIME DEFAULT CURRENT_TIMESTAMP
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='lobster profile stats cache';
- SET @dbname = DATABASE();
- SET @tablename = 'lobster_user_profile';
- SET @columnname = 'latest_stage';
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_stage VARCHAR(64) DEFAULT NULL COMMENT ''latest stage'' AFTER variable_snapshot'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @columnname = 'latest_customer_attitude';
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_customer_attitude VARCHAR(32) DEFAULT NULL COMMENT ''latest attitude'' AFTER latest_stage'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @columnname = 'latest_summary_text';
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_summary_text VARCHAR(512) DEFAULT NULL COMMENT ''latest summary snippet'' AFTER latest_customer_attitude'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @columnname = 'profile_aggregate_preview';
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN profile_aggregate_preview VARCHAR(420) DEFAULT NULL COMMENT ''list aggregate preview'' AFTER latest_summary_text'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @columnname = 'latest_summary_time';
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_profile ADD COLUMN latest_summary_time DATETIME DEFAULT NULL COMMENT ''latest summary time'' AFTER profile_aggregate_preview'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_stage')>0,'SELECT 1','CREATE INDEX idx_profile_latest_stage ON lobster_user_profile (company_id, latest_stage)'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_attitude')>0,'SELECT 1','CREATE INDEX idx_profile_latest_attitude ON lobster_user_profile (company_id, latest_customer_attitude)'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
- SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME='lobster_user_profile' AND INDEX_NAME='idx_profile_latest_summary_time')>0,'SELECT 1','CREATE INDEX idx_profile_latest_summary_time ON lobster_user_profile (company_id, latest_summary_time)'));
- PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
|