feat(api): add message segments support for posts and comments
Add rich message segment support enabling structured content (text, images, votes, mentions) in posts and comments. Includes segments field in models, DTOs, handlers, and services. Also adds @mention notification processing and migrates vote data to embedded segments.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package dto
|
||||
package dto
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
@@ -145,6 +145,29 @@ func NewLinkSegment(url, title, description, image string) model.MessageSegment
|
||||
}
|
||||
}
|
||||
|
||||
// ExtractVoteSegmentData 从消息链中提取投票Segment数据
|
||||
func ExtractVoteSegmentData(segments model.MessageSegments) *VoteSegmentData {
|
||||
for _, segment := range segments {
|
||||
if segment.Type == string(SegmentTypeVote) {
|
||||
dataBytes, err := json.Marshal(segment.Data)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
var voteData VoteSegmentData
|
||||
if err := json.Unmarshal(dataBytes, &voteData); err != nil {
|
||||
continue
|
||||
}
|
||||
return &voteData
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// HasVoteSegment 检查消息链中是否包含投票Segment
|
||||
func HasVoteSegment(segments model.MessageSegments) bool {
|
||||
return HasSegmentType(segments, SegmentTypeVote)
|
||||
}
|
||||
|
||||
// ExtractTextContentFromJSON 从JSON格式的segments中提取纯文本内容
|
||||
// 用于从数据库读取的 []byte 格式的 segments
|
||||
// 已废弃:现在数据库直接存储 model.MessageSegments 类型
|
||||
@@ -202,6 +225,8 @@ func ExtractTextContentFromModel(segments model.MessageSegments) string {
|
||||
} else {
|
||||
result += "[链接]"
|
||||
}
|
||||
case "vote":
|
||||
result += "[投票]"
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user