diff --git a/db2/scripts/patch_002_notes_timestamps.sql b/db2/scripts/patch_002_notes_timestamps.sql new file mode 100644 index 0000000..46d9d2f --- /dev/null +++ b/db2/scripts/patch_002_notes_timestamps.sql @@ -0,0 +1,10 @@ +-- 补丁 002:Notes 表新增创建时间 / 更新时间列 +-- 数据库类型: SQLite +-- 依赖: create_sqlite3.sql(Notes 表已存在) +-- 幂等性: ADD COLUMN 为一次性迁移,重复执行会报 "duplicate column name", +-- 请按迁移编号顺序执行一次。 + +-- 创建时间(新增节点时由 dnfs2 填入本地时间) +ALTER TABLE Notes ADD COLUMN created_at DATETIME; +-- 更新时间(新增/更新节点时由 dnfs2 填入本地时间) +ALTER TABLE Notes ADD COLUMN updated_at DATETIME; diff --git a/dnfs2/src/dnfs2.cpp b/dnfs2/src/dnfs2.cpp index c16daac..c279c84 100644 --- a/dnfs2/src/dnfs2.cpp +++ b/dnfs2/src/dnfs2.cpp @@ -89,6 +89,16 @@ static std::string utc_now() { return buf; } +static std::string local_now() { + auto now = std::chrono::system_clock::now(); + std::time_t t = std::chrono::system_clock::to_time_t(now); + struct tm tmbuf; + localtime_r(&t, &tmbuf); + char buf[32]; + std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tmbuf); + return buf; +} + static int safe_stoi(const std::string& s, const char* field_name) { try { size_t pos = 0; @@ -1034,10 +1044,12 @@ private: // 执行插入 json::object values; - values["pid"] = pid; - values["owner"] = info->user; - values["title"] = title; - values["content"] = content; + values["pid"] = pid; + values["owner"] = info->user; + values["title"] = title; + values["content"] = content; + values["created_at"] = local_now(); + values["updated_at"] = local_now(); json::object payload; payload["action"] = "insert"; @@ -1241,9 +1253,10 @@ private: // 执行更新 json::object values; - values["pid"] = pid; - values["title"] = title; - values["content"] = content; + values["pid"] = pid; + values["title"] = title; + values["content"] = content; + values["updated_at"] = local_now(); json::object payload; payload["action"] = "update";