package cache import "time" // TTLTier represents a cache TTL tier with a name and duration. type TTLTier struct { Name string Duration time.Duration } // defaultTiers maps engine names to their default TTL tiers. var defaultTiers = map[string]TTLTier{ // Static knowledge engines — rarely change "wikipedia": {Name: "static", Duration: 24 * time.Hour}, "wikidata": {Name: "static", Duration: 24 * time.Hour}, "arxiv": {Name: "static", Duration: 24 * time.Hour}, "crossref": {Name: "static", Duration: 24 * time.Hour}, "stackoverflow": {Name: "static", Duration: 24 * time.Hour}, "github": {Name: "static", Duration: 24 * time.Hour}, // API-based general search — fresher data "braveapi": {Name: "api_general", Duration: 1 * time.Hour}, "youtube": {Name: "api_general", Duration: 1 * time.Hour}, // Scraped general search — moderately stable "google": {Name: "scraped_general", Duration: 2 * time.Hour}, "bing": {Name: "scraped_general", Duration: 2 * time.Hour}, "duckduckgo": {Name: "scraped_general", Duration: 2 * time.Hour}, "qwant": {Name: "scraped_general", Duration: 2 * time.Hour}, "brave": {Name: "scraped_general", Duration: 2 * time.Hour}, // News/social — changes frequently "reddit": {Name: "news_social", Duration: 30 * time.Minute}, // Image search "bing_images": {Name: "images", Duration: 1 * time.Hour}, "ddg_images": {Name: "images", Duration: 1 * time.Hour}, "qwant_images": {Name: "images", Duration: 1 * time.Hour}, } // EngineTier returns the TTL tier for an engine, applying overrides if provided. // If the engine has no defined tier, returns a default of 1 hour. func EngineTier(engineName string, overrides map[string]time.Duration) TTLTier { // Check override first — override tier name is just the engine name if override, ok := overrides[engineName]; ok && override > 0 { return TTLTier{Name: engineName, Duration: override} } // Fall back to default tier if tier, ok := defaultTiers[engineName]; ok { return tier } // Unknown engines get a sensible default return TTLTier{Name: "unknown", Duration: 1 * time.Hour} }