WebHooker/migrations/0006_config_d1.sql
RhenCloud 25ebae4ae5
feat(storage): migrate config, dedup and delivery state to D1
- Move oversized queue payloads from KV to R2 (PAYLOAD binding, webhooks/YYYY/MM/DD/*.json, KV queue:payload:* fallback)
- Persist routes/groups to D1 (d1_routes/d1_groups) with memory -> KV -> D1 three-tier cache, seeded from legacy KV config keys
- Move webhook dedup (dedup_keys), delivery state (delivery_state) and message tracking (message_tracking) to D1 via canUseD1 probe with automatic KV fallback
- Batch send_logs inserts (recordSendBatch) and add group_id/ts index
- Add storage-prune scheduled task for expired dedup/state/tracking rows
- Add TTL to invite:group:{id} index and audit all ephemeral KV keys
- Add D1 indexes for the new tables
- Sync AGENTS.md, README.md/zh and docs/ (en/zh) with the new storage layout
2026-08-17 15:01:20 +08:00

28 lines
No EOL
790 B
SQL

CREATE TABLE IF NOT EXISTS d1_groups (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
data TEXT NOT NULL,
version INTEGER NOT NULL DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS d1_routes (
id TEXT NOT NULL,
group_id TEXT NOT NULL,
name TEXT NOT NULL,
enabled INTEGER NOT NULL DEFAULT 1,
filters TEXT NOT NULL,
targets TEXT NOT NULL,
stop INTEGER NOT NULL DEFAULT 0,
fallback INTEGER NOT NULL DEFAULT 0,
discord_role_ids TEXT,
ast TEXT,
version INTEGER NOT NULL DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
PRIMARY KEY (id, group_id),
FOREIGN KEY (group_id) REFERENCES d1_groups(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_d1_routes_group_id ON d1_routes(group_id);