90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
|
|
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)
|
||
|
|
}
|