package mappers import ( "RenewCMS/internal/domain/article" "RenewCMS/internal/infrastructure/persistence/models" "encoding/json" ) const emptyDismissed = "[]" func decodeDismissed(raw string) []string { codes := []string{} if raw == "" { return codes } if err := json.Unmarshal([]byte(raw), &codes); err != nil || codes == nil { return []string{} } return codes } func encodeDismissed(codes []string) string { if len(codes) == 0 { return emptyDismissed } encoded, err := json.Marshal(codes) if err != nil { return emptyDismissed } return string(encoded) } func ArticleToDomain(m models.Article) article.Article { return article.Article{ ID: m.ID, Title: m.Title, Body: m.Body, IsOnline: m.IsOnline, SiteID: m.SiteID, Slug: m.Slug, Excerpt: m.Excerpt, SEOTitle: m.SEOTitle, SEODescription: m.SEODescription, CoverImageID: m.CoverImageID, CoverImageAlt: m.CoverImageAlt, SocialTitle: m.SocialTitle, SocialDescription: m.SocialDescription, SocialImageID: m.SocialImageID, CanonicalURL: m.CanonicalURL, Noindex: m.Noindex, SEODismissed: decodeDismissed(m.SEODismissed), CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, } } func ArticleToModel(a article.Article) models.Article { return models.Article{ Title: a.Title, Body: a.Body, IsOnline: a.IsOnline, SiteID: a.SiteID, Slug: a.Slug, Excerpt: a.Excerpt, SEOTitle: a.SEOTitle, SEODescription: a.SEODescription, CoverImageID: a.CoverImageID, CoverImageAlt: a.CoverImageAlt, SocialTitle: a.SocialTitle, SocialDescription: a.SocialDescription, SocialImageID: a.SocialImageID, CanonicalURL: a.CanonicalURL, Noindex: a.Noindex, SEODismissed: encodeDismissed(a.SEODismissed), CreatedAt: a.CreatedAt, UpdatedAt: a.UpdatedAt, } }