From 48564ec38466061fc42f4856ab50d02809f52a58 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Fri, 17 Apr 2026 13:40:16 +0800 Subject: [PATCH] feat(content): enhance ContentChunk structure with Provider and StorageKey fields --- internal/pkg/utils/content_chunk.go | 19 +++++++++----- internal/pkg/utils/content_chunk_test.go | 8 +++++- .../services/wxwork_kf_outbound_service.go | 26 +++++++++---------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/internal/pkg/utils/content_chunk.go b/internal/pkg/utils/content_chunk.go index 52b9799..06ce98e 100644 --- a/internal/pkg/utils/content_chunk.go +++ b/internal/pkg/utils/content_chunk.go @@ -1,6 +1,7 @@ package utils import ( + "cs-agent/internal/pkg/enums" "strings" "golang.org/x/net/html" @@ -14,9 +15,11 @@ const ( ) type ContentChunk struct { - Type ContentChunkType // - Content string // text content or image url - AssetID string // image asset id + Type ContentChunkType // + Content string // text content or image url + AssetID string // image asset id + Provider enums.AssetProvider // image provider + StorageKey string // image storage key } func SplitHTMLContentChunks(content string) ([]ContentChunk, error) { @@ -59,13 +62,17 @@ func SplitHTMLContentChunks(content string) ([]ContentChunk, error) { flushText() src := strings.TrimSpace(findContentChunkHTMLAttr(node, "src")) assetID := strings.TrimSpace(findContentChunkHTMLAttr(node, "data-asset-id")) + provider := enums.AssetProvider(strings.TrimSpace(findContentChunkHTMLAttr(node, "data-provider"))) + storageKey := strings.TrimSpace(findContentChunkHTMLAttr(node, "data-storage-key")) if src == "" && assetID == "" { return } chunks = append(chunks, ContentChunk{ - Type: ContentChunkTypeImage, - Content: src, - AssetID: assetID, + Type: ContentChunkTypeImage, + Content: src, + AssetID: assetID, + Provider: provider, + StorageKey: storageKey, }) return } diff --git a/internal/pkg/utils/content_chunk_test.go b/internal/pkg/utils/content_chunk_test.go index 32a4463..cfd71c0 100644 --- a/internal/pkg/utils/content_chunk_test.go +++ b/internal/pkg/utils/content_chunk_test.go @@ -1,6 +1,7 @@ package utils import ( + "cs-agent/internal/pkg/enums" "reflect" "testing" ) @@ -55,7 +56,12 @@ func TestSplitHTMLContentChunks(t *testing.T) { name: "image with asset metadata only", content: `

a

`, want: []ContentChunk{ - {Type: ContentChunkTypeImage, AssetID: "asset_1"}, + { + Type: ContentChunkTypeImage, + AssetID: "asset_1", + Provider: enums.AssetProviderLocal, + StorageKey: "images/a.png", + }, }, }, { diff --git a/internal/services/wxwork_kf_outbound_service.go b/internal/services/wxwork_kf_outbound_service.go index f084cae..027df5b 100644 --- a/internal/services/wxwork_kf_outbound_service.go +++ b/internal/services/wxwork_kf_outbound_service.go @@ -13,6 +13,7 @@ import ( "cs-agent/internal/repositories" "cs-agent/internal/wxwork" + "github.com/mlogclub/simple/common/strs" "github.com/mlogclub/simple/sqls" "github.com/silenceper/wechat/v2/work/kf/sendmsg" ) @@ -445,27 +446,24 @@ func (s *wxWorkKFOutboundService) buildHTMLChunks(content string) ([]wxWorkKFOut for _, chunk := range contentChunks { switch chunk.Type { case utils.ContentChunkTypeText: - text := strings.TrimSpace(chunk.Content) - if text == "" { - continue + if strs.IsNotBlank(chunk.Content) { + chunks = append(chunks, wxWorkKFOutboundChunk{ + MessageType: enums.IMMessageTypeText, + Content: chunk.Content, + }) } - chunks = append(chunks, wxWorkKFOutboundChunk{ - MessageType: enums.IMMessageTypeText, - Content: text, - }) case utils.ContentChunkTypeImage: - assetID := strings.TrimSpace(chunk.AssetID) - if assetID == "" { + if strs.IsBlank(chunk.AssetID) { chunks = append(chunks, wxWorkKFOutboundChunk{ MessageType: enums.IMMessageTypeText, Content: "[图片]", }) - continue + } else { + chunks = append(chunks, wxWorkKFOutboundChunk{ + MessageType: enums.IMMessageTypeImage, + AssetID: chunk.AssetID, + }) } - chunks = append(chunks, wxWorkKFOutboundChunk{ - MessageType: enums.IMMessageTypeImage, - AssetID: assetID, - }) } } if len(chunks) == 0 {