package model import ( "net/url" "time" ) // TODO docstring type Article struct { Id int SourceUrl string PublishDate time.Time FetchDate time.Time Title string Content string AiSummary string } func (a *Article) Clone() *Article { return &Article{ Id: a.Id, SourceUrl: a.SourceUrl, PublishDate: a.PublishDate, FetchDate: a.FetchDate, Title: a.Title, Content: a.Content, AiSummary: a.AiSummary, } } // TODO docstring type ArticleViewModel struct { Id int Title string PublishDate string ShortSource string Summary string AiSummarized bool } type ArticlePageViewModel struct { SourceUrl string ShortSource string PublishDate string Title string Content string AiSummary string } // TODO docstring func (a *Article) ViewModel() *ArticleViewModel { summary := a.AiSummary if summary == "" { if len(a.Content) > 200 { summary = a.Content[:200] } else { summary = a.Content } } short_url := "" parsedURL, err := url.Parse(a.SourceUrl) if err == nil { short_url = parsedURL.Hostname() } return &ArticleViewModel{ Id: a.Id, Title: a.Title, PublishDate: a.PublishDate.Local().Format("02.01.2006"), ShortSource: short_url, Summary: summary, AiSummarized: a.AiSummary != "", } } func (a *Article) PageViewModel() *ArticlePageViewModel { summary := a.AiSummary if summary == "" { summary = "N/A" } short_url := "" parsedURL, err := url.Parse(a.SourceUrl) if err == nil { short_url = parsedURL.Hostname() } return &ArticlePageViewModel{ SourceUrl: a.SourceUrl, ShortSource: short_url, Title: a.Title, PublishDate: a.PublishDate.Local().Format("02.01.2006 15:04"), Content: a.Content, AiSummary: summary, } }