feat: editor write path

This commit is contained in:
Florian Sylvain committed 2026-11-02 03:24:30 +01:00
1 parent d9158025d4
commit a0b3c58c52
88 files changed
+5738 -263

No files matched your search

@@ -0,0 +1,83 @@
package useCases
import (
"RenewCMS/internal/domain/article"
"RenewCMS/internal/domain/audit"
"RenewCMS/internal/domain/builtintype"
"RenewCMS/internal/domain/language"
"RenewCMS/internal/domain/localization"
"RenewCMS/internal/domain/role"
"cmp"
"slices"
)
func (c ContentCaller) isAnonymous() bool {
return c.UserID == 0
}
func (c ContentCaller) capabilitiesFor(art article.Article) []string {
capabilities := []string{article.CapabilityRead}
if c.Grants.Permits(role.KeyContentUpdate, builtintype.KeyArticle, c.UserID, art.CreatedBy) {
capabilities = append(capabilities, article.CapabilityEdit)
}
if c.Grants.Permits(role.KeyContentPublish, builtintype.KeyArticle, c.UserID, art.CreatedBy) {
capabilities = append(capabilities, article.CapabilityPublish)
}
if c.Grants.Permits(role.KeyContentDelete, builtintype.KeyArticle, c.UserID, art.CreatedBy) {
capabilities = append(capabilities, article.CapabilityDelete)
}
if c.Grants.HoldsFor(role.KeyContentCreate, builtintype.KeyArticle) {
capabilities = append(capabilities, article.CapabilityCreateTranslation)
}
return capabilities
}
func (c ContentCaller) readableVersions(versions []article.Article) []article.Article {
readable := make([]article.Article, 0, len(versions))
for _, version := range versions {
if c.seesArticle(version) {
readable = append(readable, version)
}
}
return readable
}
func sortByCreation(versions []article.Article) []article.Article {
ordered := slices.Clone(versions)
slices.SortFunc(ordered, func(left article.Article, right article.Article) int {
if byTime := left.CreatedAt.Compare(right.CreatedAt); byTime != 0 {
return byTime
}
return cmp.Compare(left.ID, right.ID)
})
return ordered
}
func sortByLanguage(versions []article.Article, rows []localization.Row) []article.Article {
defaultTag := localization.DefaultTag(rows)
ordered := slices.Clone(versions)
slices.SortFunc(ordered, func(left article.Article, right article.Article) int {
if byTag := localization.CompareTags(defaultTag, left.Lang, right.Lang); byTag != 0 {
return byTag
}
return cmp.Compare(left.ID, right.ID)
})
return ordered
}
func languagesOf(versions []article.Article) []string {
tags := make([]string, 0, len(versions))
for _, version := range versions {
tags = append(tags, version.Lang)
}
return tags
}
func articleEvent(action string, art article.Article) audit.Event {
event := audit.NewEvent(action, audit.CategoryArticles)
event.Target = articleTarget(art)
if art.Lang != language.Unassigned {
event.Params[audit.ParamLang] = art.Lang
}
return event
}