thread-master/backend/internal/logic/copy_mission/research_map_entity.go

79 lines
2.9 KiB
Go

package copy_mission
import (
missionentity "haixun-backend/internal/model/copy_mission/domain/entity"
missiondomain "haixun-backend/internal/model/copy_mission/domain/usecase"
)
func summaryResearchItemsToEntity(items []missiondomain.ResearchItemSummary) []missionentity.ResearchItem {
out := make([]missionentity.ResearchItem, 0, len(items))
for _, item := range items {
out = append(out, missionentity.ResearchItem{
Title: item.Title,
URL: item.URL,
Snippet: item.Snippet,
Query: item.Query,
})
}
return out
}
func summaryToEntityResearchMap(summary missiondomain.ResearchMapSummary) missionentity.ResearchMap {
tags := make([]missionentity.SuggestedTag, 0, len(summary.SuggestedTags))
for _, tag := range summary.SuggestedTags {
tags = append(tags, missionentity.SuggestedTag{
Tag: tag.Tag,
Reason: tag.Reason,
SearchIntent: tag.SearchIntent,
SearchType: tag.SearchType,
})
}
accounts := make([]missionentity.SimilarAccount, 0, len(summary.SimilarAccounts))
for _, acc := range summary.SimilarAccounts {
accounts = append(accounts, missionentity.SimilarAccount{
Username: acc.Username,
Reason: acc.Reason,
Source: acc.Source,
MatchedSource: append([]string(nil), acc.MatchedSource...),
Confidence: acc.Confidence,
Status: acc.Status,
TopicRelevance: acc.TopicRelevance,
LastSeenAt: acc.LastSeenAt,
ProfileURL: acc.ProfileURL,
AuthorVerified: acc.AuthorVerified,
FollowerCount: acc.FollowerCount,
EngagementScore: acc.EngagementScore,
LikeCount: acc.LikeCount,
ReplyCount: acc.ReplyCount,
PostCount: acc.PostCount,
})
}
samples := make([]missionentity.AudienceSample, 0, len(summary.AudienceSamples))
for _, sample := range summary.AudienceSamples {
samples = append(samples, missionentity.AudienceSample{
Username: sample.Username,
SamplePostID: sample.SamplePostID,
SampleText: sample.SampleText,
ReplyLikeCount: sample.ReplyLikeCount,
Appearances: sample.Appearances,
FirstSeenAt: sample.FirstSeenAt,
LastSeenAt: sample.LastSeenAt,
Status: sample.Status,
})
}
return missionentity.ResearchMap{
AudienceSummary: summary.AudienceSummary,
ContentGoal: summary.ContentGoal,
Questions: append([]string(nil), summary.Questions...),
Pillars: append([]string(nil), summary.Pillars...),
Exclusions: append([]string(nil), summary.Exclusions...),
KnowledgeItems: append([]string(nil), summary.KnowledgeItems...),
SelectedKnowledgeItems: append([]string(nil), summary.SelectedKnowledgeItems...),
ResearchItems: summaryResearchItemsToEntity(summary.ResearchItems),
SuggestedTags: tags,
SimilarAccounts: accounts,
AudienceSamples: samples,
BenchmarkNotes: summary.BenchmarkNotes,
}
}