79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
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,
|
|
}
|
|
}
|