thread-master/old/backend/internal/worker/job/payload_helpers.go

90 lines
2.3 KiB
Go
Raw Normal View History

package job
import (
"fmt"
"strconv"
"strings"
missionentity "haixun-backend/internal/model/copy_mission/domain/entity"
missiondomain "haixun-backend/internal/model/copy_mission/domain/usecase"
)
func intField(payload map[string]any, key string) int {
if payload == nil {
return 0
}
switch v := payload[key].(type) {
case int:
return v
case int64:
return int(v)
case float64:
return int(v)
case string:
n, _ := strconv.Atoi(strings.TrimSpace(v))
return n
default:
return 0
}
}
func copyMissionIDFromPayload(payload map[string]any) string {
if id := stringField(payload, "copy_mission_id"); id != "" {
return id
}
return stringField(payload, "mission_id")
}
func similarAccountsFromSummary(items []missiondomain.SimilarAccountSummary) []missionentity.SimilarAccount {
out := make([]missionentity.SimilarAccount, 0, len(items))
for _, item := range items {
username := strings.TrimSpace(strings.TrimPrefix(item.Username, "@"))
if username == "" {
continue
}
out = append(out, missionentity.SimilarAccount{
Username: username,
Reason: item.Reason,
Source: item.Source,
MatchedSource: append([]string(nil), item.MatchedSource...),
Confidence: item.Confidence,
Status: item.Status,
TopicRelevance: item.TopicRelevance,
LastSeenAt: item.LastSeenAt,
ProfileURL: item.ProfileURL,
AuthorVerified: item.AuthorVerified,
FollowerCount: item.FollowerCount,
EngagementScore: item.EngagementScore,
LikeCount: item.LikeCount,
ReplyCount: item.ReplyCount,
PostCount: item.PostCount,
})
}
return out
}
func audienceSamplesFromSummary(items []missiondomain.AudienceSampleSummary) []missionentity.AudienceSample {
out := make([]missionentity.AudienceSample, 0, len(items))
for _, item := range items {
username := strings.TrimSpace(strings.TrimPrefix(item.Username, "@"))
if username == "" {
continue
}
out = append(out, missionentity.AudienceSample{
Username: username,
SamplePostID: item.SamplePostID,
SampleText: item.SampleText,
ReplyLikeCount: item.ReplyLikeCount,
Appearances: item.Appearances,
FirstSeenAt: item.FirstSeenAt,
LastSeenAt: item.LastSeenAt,
Status: item.Status,
})
}
return out
}
func debugPayloadValue(value any) string {
return fmt.Sprintf("%v", value)
}