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 { delta := utf8.RuneCountInString(after) - utf8.RuneCountInString(before) return Change{Field: FieldBody, Kind: ChangeBody, Delta: &delta} } 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 = appendChange(changes, FieldWidth, image.DimensionText(before.Width), image.DimensionText(after.Width)) changes = appendChange(changes, FieldHeight, image.DimensionText(before.Height), image.DimensionText(after.Height)) changes = appendChange(changes, FieldFit, string(before.Fit), string(after.Fit)) changes = appendChange(changes, FieldFormat, string(before.Format), string(after.Format)) changes = appendChange(changes, FieldQuality, image.QualityText(before.Quality), image.QualityText(after.Quality)) return changes } func appendChange(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 }