70 lines
3.1 KiB
Go
70 lines
3.1 KiB
Go
|
|
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"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type SimilarAccount struct {
|
||
|
|
Username string `bson:"username" json:"username"`
|
||
|
|
Reason string `bson:"reason,omitempty" json:"reason,omitempty"`
|
||
|
|
Source string `bson:"source,omitempty" json:"source,omitempty"`
|
||
|
|
Confidence string `bson:"confidence,omitempty" json:"confidence,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 ResearchMap struct {
|
||
|
|
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"`
|
||
|
|
SuggestedTags []SuggestedTag `bson:"suggested_tags,omitempty" json:"suggested_tags,omitempty"`
|
||
|
|
SimilarAccounts []SimilarAccount `bson:"similar_accounts,omitempty" json:"similar_accounts,omitempty"`
|
||
|
|
BenchmarkNotes string `bson:"benchmark_notes,omitempty" json:"benchmark_notes,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m ResearchMap) IsEmpty() bool {
|
||
|
|
return m.AudienceSummary == "" &&
|
||
|
|
m.ContentGoal == "" &&
|
||
|
|
len(m.Questions) == 0 &&
|
||
|
|
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"`
|
||
|
|
}
|