thread-master/old/backend/internal/model/copy_mission/domain/entity/mission.go

109 lines
5.2 KiB
Go
Raw Normal View History

2026-06-26 08:37:04 +00:00
package entity
const CollectionName = "copy_missions"
type Status string
const (
StatusOpen Status = "open"
StatusMapped Status = "mapped"
StatusScanned Status = "scanned"
StatusDrafted Status = "drafted"
StatusArchived Status = "archived"
StatusDeleted Status = "deleted"
)
type SuggestedTag struct {
Tag string `bson:"tag" json:"tag"`
Reason string `bson:"reason,omitempty" json:"reason,omitempty"`
SearchIntent string `bson:"search_intent,omitempty" json:"search_intent,omitempty"`
SearchType string `bson:"search_type,omitempty" json:"search_type,omitempty"`
}
2026-06-28 08:28:42 +00:00
const (
SimilarAccountStatusRecommended = "recommended"
SimilarAccountStatusPinned = "pinned"
SimilarAccountStatusExcluded = "excluded"
SimilarAccountStatusPromoted = "promoted"
)
const (
AudienceSampleStatusPinned = "pinned"
AudienceSampleStatusExcluded = "excluded"
)
2026-06-26 08:37:04 +00:00
type SimilarAccount struct {
2026-06-28 08:28:42 +00:00
Username string `bson:"username" json:"username"`
Reason string `bson:"reason,omitempty" json:"reason,omitempty"`
Source string `bson:"source,omitempty" json:"source,omitempty"`
MatchedSource []string `bson:"matched_source,omitempty" json:"matched_source,omitempty"`
Confidence string `bson:"confidence,omitempty" json:"confidence,omitempty"`
Status string `bson:"status,omitempty" json:"status,omitempty"`
TopicRelevance float64 `bson:"topic_relevance,omitempty" json:"topic_relevance,omitempty"`
LastSeenAt int64 `bson:"last_seen_at,omitempty" json:"last_seen_at,omitempty"`
ProfileURL string `bson:"profile_url,omitempty" json:"profile_url,omitempty"`
AuthorVerified bool `bson:"author_verified,omitempty" json:"author_verified,omitempty"`
FollowerCount int `bson:"follower_count,omitempty" json:"follower_count,omitempty"`
EngagementScore int `bson:"engagement_score,omitempty" json:"engagement_score,omitempty"`
LikeCount int `bson:"like_count,omitempty" json:"like_count,omitempty"`
ReplyCount int `bson:"reply_count,omitempty" json:"reply_count,omitempty"`
PostCount int `bson:"post_count,omitempty" json:"post_count,omitempty"`
}
type ResearchItem struct {
Title string `bson:"title,omitempty" json:"title,omitempty"`
URL string `bson:"url,omitempty" json:"url,omitempty"`
Snippet string `bson:"snippet,omitempty" json:"snippet,omitempty"`
Query string `bson:"query,omitempty" json:"query,omitempty"`
}
type AudienceSample struct {
Username string `bson:"username" json:"username"`
SamplePostID string `bson:"sample_post_id,omitempty" json:"sample_post_id,omitempty"`
SampleText string `bson:"sample_text,omitempty" json:"sample_text,omitempty"`
ReplyLikeCount int `bson:"reply_like_count,omitempty" json:"reply_like_count,omitempty"`
Appearances int `bson:"appearances,omitempty" json:"appearances,omitempty"`
FirstSeenAt int64 `bson:"first_seen_at" json:"first_seen_at"`
LastSeenAt int64 `bson:"last_seen_at,omitempty" json:"last_seen_at,omitempty"`
Status string `bson:"status,omitempty" json:"status,omitempty"`
2026-06-26 08:37:04 +00:00
}
type ResearchMap struct {
2026-06-28 08:28:42 +00:00
AudienceSummary string `bson:"audience_summary,omitempty" json:"audience_summary,omitempty"`
ContentGoal string `bson:"content_goal,omitempty" json:"content_goal,omitempty"`
Questions []string `bson:"questions,omitempty" json:"questions,omitempty"`
Pillars []string `bson:"pillars,omitempty" json:"pillars,omitempty"`
Exclusions []string `bson:"exclusions,omitempty" json:"exclusions,omitempty"`
KnowledgeItems []string `bson:"knowledge_items,omitempty" json:"knowledge_items,omitempty"`
SelectedKnowledgeItems []string `bson:"selected_knowledge_items,omitempty" json:"selected_knowledge_items,omitempty"`
ResearchItems []ResearchItem `bson:"research_items,omitempty" json:"research_items,omitempty"`
SuggestedTags []SuggestedTag `bson:"suggested_tags,omitempty" json:"suggested_tags,omitempty"`
SimilarAccounts []SimilarAccount `bson:"similar_accounts,omitempty" json:"similar_accounts,omitempty"`
AudienceSamples []AudienceSample `bson:"audience_samples,omitempty" json:"audience_samples,omitempty"`
BenchmarkNotes string `bson:"benchmark_notes,omitempty" json:"benchmark_notes,omitempty"`
2026-06-26 08:37:04 +00:00
}
func (m ResearchMap) IsEmpty() bool {
return m.AudienceSummary == "" &&
m.ContentGoal == "" &&
len(m.Questions) == 0 &&
2026-06-28 08:28:42 +00:00
len(m.KnowledgeItems) == 0 &&
2026-06-26 08:37:04 +00:00
len(m.SuggestedTags) == 0
}
type Mission struct {
ID string `bson:"_id"`
TenantID string `bson:"tenant_id"`
OwnerUID string `bson:"owner_uid"`
PersonaID string `bson:"persona_id"`
Label string `bson:"label,omitempty"`
SeedQuery string `bson:"seed_query,omitempty"`
Brief string `bson:"brief,omitempty"`
ResearchMap ResearchMap `bson:"research_map,omitempty"`
SelectedTags []string `bson:"selected_tags,omitempty"`
LastScanJobID string `bson:"last_scan_job_id,omitempty"`
Status Status `bson:"status"`
CreateAt int64 `bson:"create_at"`
UpdateAt int64 `bson:"update_at"`
}