feat: public API, SEO and existing surfaces
This commit is contained in:
1 parent
45fbbc33b1
commit
c390fcfe8d
103 files changed
+4476
-231
No files matched your search
@@ -0,0 +1,63 @@
|
||||
package useCases
|
||||
|
||||
import (
|
||||
"RenewCMS/internal/domain/article"
|
||||
"RenewCMS/internal/domain/localization"
|
||||
"RenewCMS/internal/domain/site"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func confirmedDefault(rows []localization.Row) string {
|
||||
if localization.NeedsSetup(rows) {
|
||||
return ""
|
||||
}
|
||||
return localization.DefaultTag(rows)
|
||||
}
|
||||
|
||||
func eligibleSiblings(rows []localization.Row, versions []article.Article, served article.Article) []article.Article {
|
||||
defaultTag := confirmedDefault(rows)
|
||||
siblings := []article.Article{}
|
||||
for _, version := range versions {
|
||||
if version.ID == served.ID || version.SiteID != served.SiteID || !version.IsOnline || version.Lang == "" {
|
||||
continue
|
||||
}
|
||||
if localization.EnabledTag(rows, version.Lang) {
|
||||
siblings = append(siblings, version)
|
||||
}
|
||||
}
|
||||
slices.SortFunc(siblings, func(left article.Article, right article.Article) int {
|
||||
return localization.CompareTags(defaultTag, left.Lang, right.Lang)
|
||||
})
|
||||
return siblings
|
||||
}
|
||||
|
||||
func storyVersions(repository article.Repository, art article.Article) ([]article.Article, error) {
|
||||
if art.StoryID == 0 {
|
||||
return []article.Article{}, nil
|
||||
}
|
||||
return repository.ListByStory(art.StoryID)
|
||||
}
|
||||
|
||||
func alternatesOf(owner site.Site, siblings []article.Article) []article.Alternate {
|
||||
alternates := make([]article.Alternate, 0, len(siblings))
|
||||
for _, sibling := range siblings {
|
||||
alternates = append(alternates, article.Alternate{ID: sibling.ID, Lang: sibling.Lang, StoryID: sibling.StoryID, Slug: sibling.Slug, URL: owner.PublicURL(sibling.Lang, sibling.Slug)})
|
||||
}
|
||||
return alternates
|
||||
}
|
||||
|
||||
func rowOf(rows []localization.Row, tag string) localization.Row {
|
||||
for _, row := range rows {
|
||||
if row.Tag == tag {
|
||||
return row
|
||||
}
|
||||
}
|
||||
return localization.Row{Tag: tag}
|
||||
}
|
||||
|
||||
func socialLocaleOf(rows []localization.Row, tag string, siteLocale *string) string {
|
||||
if resolved := localization.EffectiveSocialLocale(rowOf(rows, tag), siteLocale); resolved != nil {
|
||||
return *resolved
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in new issue
Block a user