thread-master/backend/internal/library/placement/recency.go

36 lines
947 B
Go

package placement
import "time"
const (
MaxPostAgeDays = 30
IdealMaxPostAgeDays = 7
WebSearchMaxAgeDays = 14
// MinRecencyCandidatesPerTag triggers wider recency windows when a keyword finds fewer posts.
MinRecencyCandidatesPerTag = 1
// MaxRecencyCascadeQueries caps extra Search API calls per patrol run.
MaxRecencyCascadeQueries = 10
)
// RecencyCascadeDays is the patrol recency ladder: nearest window first, then shift older.
func RecencyCascadeDays() []int {
return []int{IdealMaxPostAgeDays, WebSearchMaxAgeDays, MaxPostAgeDays}
}
func FormatAfterDate(maxAgeDays int, now time.Time) string {
if now.IsZero() {
now = time.Now()
}
date := now.AddDate(0, 0, -maxAgeDays).UTC()
return date.Format("2006-01-02")
}
func FormatPublishedAfterISO(maxAgeDays int, now time.Time) string {
if now.IsZero() {
now = time.Now()
}
date := now.AddDate(0, 0, -maxAgeDays).UTC()
return date.Format("2006-01-02T15:04:05.000Z")
}