package useCases import ( "RenewCMS/internal/domain/article" "RenewCMS/internal/domain/localization" "RenewCMS/internal/domain/site" "slices" ) func eligibleSiblings(rows []localization.Row, versions []article.Article, served article.Article) []article.Article { defaultTag := localization.ConfirmedDefaultTag(rows) siblings := []article.Article{} for _, version := range versions { if version.ID == served.ID || version.SiteID != served.SiteID || !version.IsOnline { continue } if localization.PublicTag(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 "" }