From ada154418fb223e742112e58ef169193e588eafb Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Thu, 03 Sep 2026 14:29:28 +0800
Subject: [PATCH] fix(index): GetFileStats 容忍旧库 NULL 指纹(sql.NullInt64),升级后自动补指纹

---
 internal/draft/intake.go |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/internal/draft/intake.go b/internal/draft/intake.go
index 0f4c36f..8e90449 100644
--- a/internal/draft/intake.go
+++ b/internal/draft/intake.go
@@ -654,6 +654,13 @@
 				HasMergeHint: hasMerge,
 			}
 
+			// 从路径提取一级目录名作为 Type
+			// 路径格式:待审阅/TAPD提取/003-xxx/draft.md
+			parts := strings.Split(relPath, string(filepath.Separator))
+			if len(parts) >= 2 && parts[0] == "待审阅" {
+				draft.Type = parts[1]
+			}
+
 			// 解析 frontmatter
 			fm := parseFrontmatter(string(content))
 			if title, ok := fm["title"]; ok {
@@ -662,9 +669,6 @@
 			if status, ok := fm["status"]; ok {
 				draft.Status = status
 			}
-			if draftType, ok := fm["type"]; ok {
-				draft.Type = draftType
-			}
 			if created, ok := fm["created"]; ok {
 				draft.Created = created
 			}
@@ -690,6 +694,13 @@
 					HasMergeHint: false,
 				}
 
+				// 从路径提取一级目录名作为 Type
+				// 路径格式:待审阅/TAPD提取/003-xxx.md
+				parts := strings.Split(relPath, string(filepath.Separator))
+				if len(parts) >= 2 && parts[0] == "待审阅" {
+					draft.Type = parts[1]
+				}
+
 				// 解析 frontmatter
 				fm := parseFrontmatter(string(content))
 				if title, ok := fm["title"]; ok {
@@ -698,9 +709,6 @@
 				if status, ok := fm["status"]; ok {
 					draft.Status = status
 				}
-				if draftType, ok := fm["type"]; ok {
-					draft.Type = draftType
-				}
 				if created, ok := fm["created"]; ok {
 					draft.Created = created
 				}

--
Gitblit v1.10.0