43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package job
|
|
|
|
import (
|
|
missionentity "haixun-backend/internal/model/copy_mission/domain/entity"
|
|
missiondomain "haixun-backend/internal/model/copy_mission/domain/usecase"
|
|
)
|
|
|
|
// similarAccountsFromSummary converts the read-side usecase summary back into a
|
|
// write-side entity slice so that worker jobs can preserve previously
|
|
// discovered accounts (including MatchedSource provenance) across re-runs
|
|
// without losing information. Fields that the summary does not carry are left
|
|
// at their zero value.
|
|
func similarAccountsFromSummary(in []missiondomain.SimilarAccountSummary) []missionentity.SimilarAccount {
|
|
if len(in) == 0 {
|
|
return nil
|
|
}
|
|
out := make([]missionentity.SimilarAccount, 0, len(in))
|
|
for _, item := range in {
|
|
matched := item.MatchedSource
|
|
if len(matched) == 0 && item.Source != "" {
|
|
matched = []string{item.Source}
|
|
}
|
|
out = append(out, missionentity.SimilarAccount{
|
|
Username: item.Username,
|
|
Reason: item.Reason,
|
|
Source: item.Source,
|
|
MatchedSource: matched,
|
|
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
|
|
}
|