feat: checkpoint user state tracking service with PostgreSQL

- RESTful API: POST /heartbeat, POST /checkpoints, GET /status, GET /summaries
- State-change-only checkpoint model with extensible StateType enum
- PostgreSQL backend with sqlx, auto-migration on startup
- pg_cron scheduled aggregation (state_summaries) and offline detection
- Heartbeat-based liveness with 60s timeout auto-offline
- LEAD() window function for state duration calculation
- JSONB content field for extensible checkpoint metadata

BREAKING CHANGE: Complete rewrite from Hello World to full API service.
This commit is contained in:
2026-05-31 22:36:20 +08:00
parent 766b8a84c9
commit 13f7c1326a
20 changed files with 3315 additions and 2 deletions
+20
View File
@@ -0,0 +1,20 @@
-- 001_init.sql
-- Checkpoint 服务初始建表
CREATE TABLE IF NOT EXISTS checkpoints (
id BIGSERIAL PRIMARY KEY,
user_id VARCHAR(128) NOT NULL,
state VARCHAR(64) NOT NULL,
timestamp BIGINT NOT NULL,
content JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 核心查询索引:按用户 + 时间范围
CREATE INDEX IF NOT EXISTS idx_checkpoints_user_ts
ON checkpoints (user_id, timestamp);
-- 快速获取用户最新检查点
CREATE INDEX IF NOT EXISTS idx_checkpoints_user_latest
ON checkpoints (user_id, timestamp DESC);