feat(content): enhance ContentChunk structure with Provider and StorageKey fields

This commit is contained in:
mlogclub
2026-04-17 13:40:16 +08:00
parent 0037b97f29
commit 48564ec384
3 changed files with 32 additions and 21 deletions
+13 -6
View File
@@ -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
}
+7 -1
View File
@@ -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: `<p><img data-asset-id="asset_1" data-provider="local" data-storage-key="images/a.png" alt="a"></p>`,
want: []ContentChunk{
{Type: ContentChunkTypeImage, AssetID: "asset_1"},
{
Type: ContentChunkTypeImage,
AssetID: "asset_1",
Provider: enums.AssetProviderLocal,
StorageKey: "images/a.png",
},
},
},
{
+12 -14
View File
@@ -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 {