thread-master/backend/internal/library/viral/quality.go

40 lines
1.4 KiB
Go
Raw Permalink Normal View History

2026-06-26 08:37:04 +00:00
package viral
import "haixun-backend/internal/library/placement"
// Mission-quality gates for copy-mission viral patrol (stricter than generic patrol).
const (
MissionQualityMinLikes = 18
MissionQualityMinEngagement = 50
MissionVerifiedMinLikes = 10
MissionVerifiedMinEngagement = 35
MissionInfluencerMinFollowers = 5000
)
// PassesMissionQualityCandidate filters copy-mission scan results toward higher-signal posts.
// AuthorVerified and FollowerCount are optional enrichments (often missing on Threads API);
// when absent the default engagement bar still applies — callers should fall back to
// PassesViralCandidate rather than treating empty optional signals as failure.
func PassesMissionQualityCandidate(text string, likes, replies, engagement int, verified bool, followerCount int, exclusions []string) bool {
if !PassesViralCandidate(text, likes, replies, engagement, exclusions) {
return false
}
if verified {
return likes >= MissionVerifiedMinLikes && engagement >= MissionVerifiedMinEngagement
}
if followerCount >= MissionInfluencerMinFollowers {
return likes >= 12 && engagement >= 40
}
return likes >= MissionQualityMinLikes && engagement >= MissionQualityMinEngagement
}
func MergeAuthorSignals(prev, next placement.ScanCandidate) placement.ScanCandidate {
if next.AuthorVerified {
prev.AuthorVerified = true
}
if next.FollowerCount > prev.FollowerCount {
prev.FollowerCount = next.FollowerCount
}
return prev
}