feat: 埋点统计系统 — 数据库存储 + 管理后台查询
后端: - track_events 表存储埋点数据(事件类型、页面、数据、用户) - track 路由改为写入数据库 - logs 路由新增 /track/stats 和 /track/list 查询接口 前端: - 新增埋点统计页面(今日事件、7天趋势、热门事件) - 支持按事件类型筛选 - 管理后台添加「埋点统计」入口
This commit is contained in:
@@ -224,6 +224,25 @@ async function runMigrations(conn: mysql.Connection) {
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||
`)
|
||||
}
|
||||
|
||||
// 埋点事件表
|
||||
const hasTrackEvents = await tableExists(conn, 'track_events')
|
||||
if (!hasTrackEvents) {
|
||||
console.log('[DB] Migrating: creating track_events table')
|
||||
await conn.query(`
|
||||
CREATE TABLE IF NOT EXISTS track_events (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
event VARCHAR(50) NOT NULL COMMENT '事件类型',
|
||||
page VARCHAR(100) DEFAULT '' COMMENT '页面路径',
|
||||
data JSON DEFAULT NULL COMMENT '事件数据',
|
||||
user_id INT DEFAULT NULL COMMENT '用户ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_event (event),
|
||||
INDEX idx_created (created_at),
|
||||
INDEX idx_user (user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||
`)
|
||||
}
|
||||
}
|
||||
|
||||
export async function initDatabase() {
|
||||
|
||||
@@ -137,3 +137,15 @@ CREATE TABLE IF NOT EXISTS sys_config (
|
||||
config_value TEXT NOT NULL COMMENT '配置值',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS track_events (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
event VARCHAR(50) NOT NULL COMMENT '事件类型',
|
||||
page VARCHAR(100) DEFAULT '' COMMENT '页面路径',
|
||||
data JSON DEFAULT NULL COMMENT '事件数据',
|
||||
user_id INT DEFAULT NULL COMMENT '用户ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_event (event),
|
||||
INDEX idx_created (created_at),
|
||||
INDEX idx_user (user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
Reference in New Issue
Block a user