Files
RenewCMS/internal/domain/audit/auditChanges.go
T

88 lines
3.5 KiB
Go

package audit
import (
"RenewCMS/internal/domain/article"
"RenewCMS/internal/domain/image"
"strconv"
"unicode/utf8"
)
func TextChange(field string, before string, after string) Change {
return Change{Field: field, Kind: ChangeText, Before: &before, After: &after}
}
func BodyChange(before string, after string) Change {
return SizeChange(FieldBody, before, after)
}
func SizeChange(field string, before string, after string) Change {
delta := utf8.RuneCountInString(after) - utf8.RuneCountInString(before)
return Change{Field: field, Kind: ChangeBody, Delta: &delta}
}
func appendSizeChange(changes []Change, field string, before string, after string) []Change {
if before == after {
return changes
}
return append(changes, SizeChange(field, before, after))
}
func SEOChanges(before article.Article, after article.Article) []Change {
changes := []Change{}
changes = AppendTextChange(changes, FieldSlug, before.Slug, after.Slug)
changes = AppendTextChange(changes, FieldCanonicalURL, before.CanonicalURL, after.CanonicalURL)
changes = AppendTextChange(changes, FieldNoindex, strconv.FormatBool(before.Noindex), strconv.FormatBool(after.Noindex))
changes = appendSizeChange(changes, FieldExcerpt, before.Excerpt, after.Excerpt)
changes = appendSizeChange(changes, FieldSEOTitle, before.SEOTitle, after.SEOTitle)
changes = appendSizeChange(changes, FieldSEODescription, before.SEODescription, after.SEODescription)
changes = appendSizeChange(changes, FieldCoverImageAlt, before.CoverImageAlt, after.CoverImageAlt)
changes = appendSizeChange(changes, FieldSocialTitle, before.SocialTitle, after.SocialTitle)
changes = appendSizeChange(changes, FieldSocialDescription, before.SocialDescription, after.SocialDescription)
return changes
}
func ArticleChanges(before article.Article, after article.Article) []Change {
changes := []Change{}
if before.Title != after.Title {
changes = append(changes, TextChange(FieldTitle, before.Title, after.Title))
}
if before.IsOnline != after.IsOnline {
changes = append(changes, TextChange(FieldOnline, strconv.FormatBool(before.IsOnline), strconv.FormatBool(after.IsOnline)))
}
if before.Body != after.Body {
changes = append(changes, BodyChange(before.Body, after.Body))
}
return changes
}
func VariantChanges(before image.VariantSettings, after image.VariantSettings) []Change {
changes := []Change{}
changes = AppendTextChange(changes, FieldWidth, image.DimensionText(before.Width), image.DimensionText(after.Width))
changes = AppendTextChange(changes, FieldHeight, image.DimensionText(before.Height), image.DimensionText(after.Height))
changes = AppendTextChange(changes, FieldFit, string(before.Fit), string(after.Fit))
changes = AppendTextChange(changes, FieldFormat, string(before.Format), string(after.Format))
changes = AppendTextChange(changes, FieldQuality, image.QualityText(before.Quality), image.QualityText(after.Quality))
return changes
}
func AppendTextChange(changes []Change, field string, before string, after string) []Change {
if before == after {
return changes
}
return append(changes, TextChange(field, before, after))
}
func VariantParams(settings image.VariantSettings) map[string]any {
params := map[string]any{ParamFit: string(settings.Fit), ParamFormat: string(settings.Format)}
if settings.Width != nil {
params[ParamWidth] = *settings.Width
}
if settings.Height != nil {
params[ParamHeight] = *settings.Height
}
if settings.Quality != nil {
params[ParamQuality] = *settings.Quality
}
return params
}