package web import ( "fmt" "time" ) // storyInsightsWindow ist das Zeitfenster, in dem Instagram nach // eigener Aussage Story-Insights überhaupt vorhält — danach sind sie // auch über den offiziellen Datenexport nicht mehr zu bekommen. Reine // Produktentscheidung (Erinnerungs-Timing), keine Rechtsnorm — bewusst // hier als Konstante und nicht in rules/*.yaml, das ist ausschließlich // für die Kennzeichnungsprüfung reserviert (siehe CLAUDE.md). const storyInsightsWindow = 24 * time.Hour // insightsReminder beschreibt, ob und wie dringend eine Erinnerung // angezeigt werden soll, die Kennzahlen (Insights) eines veröffentlichten // Beitrags per Screenshot zu sichern, bevor sie unwiederbringlich // verschwinden. type insightsReminder struct { Show bool Urgent bool // Fenster läuft noch Expired bool // Fenster ist wahrscheinlich schon vorbei Message string } // computeInsightsReminder berechnet den Erinnerungsstatus. Nur für // "story"-Beiträge relevant (siehe storyInsightsWindow); alle anderen // Beitragstypen bekommen keine Erinnerung, da ihre Kennzahlen nicht auf // dieselbe Art flüchtig sind. func computeInsightsReminder(postType string, publishedAt time.Time, now time.Time, hasInsightsAsset bool) insightsReminder { if postType != "story" || hasInsightsAsset || publishedAt.IsZero() { return insightsReminder{} } elapsed := now.Sub(publishedAt) if elapsed >= storyInsightsWindow { return insightsReminder{ Show: true, Expired: true, Message: "Das Zeitfenster für Story-Insights ist bei Instagram nach eigener Aussage abgelaufen (24 Stunden) — die Kennzahlen sind wahrscheinlich nicht mehr abrufbar.", } } remainingHours := int((storyInsightsWindow - elapsed).Hours()) + 1 return insightsReminder{ Show: true, Urgent: true, Message: fmt.Sprintf("Noch ca. %d Stunde(n), um die Story-Insights zu sichern, bevor sie bei Instagram verschwinden.", remainingHours), } }