refac: article reads, story delete, no leaks, stored SEO status, rate limit, cleanup (%site%, article repo split, old lang repos, one default per site rule to domain)

This commit is contained in:
Florian Sylvain committed 2026-11-03 16:01:52 +01:00
1 parent 9d284e65a9
commit 7c15206170
85 files changed
+1788 -593

No files matched your search

@@ -20,7 +20,6 @@ const (
jsonLDArticle = "Article"
jsonLDPerson = "Person"
jsonLDWebPage = "WebPage"
sitePlaceholder = "%site%"
)
type ResolveArticleSEOUseCase struct {
@@ -69,7 +68,7 @@ func (u *ResolveArticleSEOUseCase) languageOf(art article.Article, owner site.Si
localeAlternates = []string{}
}
return seoLanguage{
defaultTag: confirmedDefault(rows),
defaultTag: localization.ConfirmedDefaultTag(rows),
locale: locale,
alternates: alternatesOf(owner, siblings),
localeAlternates: localeAlternates,
@@ -129,7 +128,7 @@ func applyTitleTemplate(template string, title string, siteName string) string {
if template == "" {
template = site.DefaultTitleTemplate
}
replacer := strings.NewReplacer(site.TitlePlaceholder, title, sitePlaceholder, siteName)
replacer := strings.NewReplacer(site.TitlePlaceholder, title, site.SitePlaceholder, siteName)
return strings.TrimSpace(replacer.Replace(template))
}
@@ -195,7 +194,7 @@ func buildJSONLD(headline string, description string, picked article.SEOImage, a
func buildResolvedSEO(art article.Article, owner site.Site, picked article.SEOImage, spoken seoLanguage) article.ResolvedSEO {
meta, titleSource := metaTitle(art)
title := applyTitleTemplate(owner.TitleTemplate, meta, owner.SiteName)
siteTextAllowed := art.Lang == "" || art.Lang == spoken.defaultTag
siteTextAllowed := localization.SiteTextAllowed(spoken.defaultTag, art.Lang)
description, descriptionSource := resolveDescription(art, owner, analyzeBody(art.Body), siteTextAllowed)
siteTextSkipped := descriptionSource == article.SEOSourceNone && owner.DefaultDescription != ""
canonical, canonicalSource := resolveCanonical(art, owner)