Files
crowsnest/src/internal/model/article.go

98 lines
1.8 KiB
Go
Raw Normal View History

2024-12-27 03:25:44 +01:00
package model
import (
2025-01-07 11:59:10 +01:00
"net/url"
"time"
2024-12-27 03:25:44 +01:00
)
2024-12-28 01:40:30 +01:00
// TODO docstring
2024-12-27 03:25:44 +01:00
type Article struct {
2025-01-12 19:57:54 +01:00
Id int
2025-01-07 11:59:10 +01:00
SourceUrl string
PublishDate time.Time
FetchDate time.Time
Title string
Content string
2025-01-07 15:26:26 +01:00
AiSummary string
2024-12-27 03:25:44 +01:00
}
2025-01-20 08:58:49 +01:00
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,
}
}
2025-01-02 16:21:02 +01:00
// TODO docstring
type ArticleViewModel struct {
2025-01-12 19:57:54 +01:00
Id int
2025-01-07 15:26:26 +01:00
Title string
PublishDate string
ShortSource string
Summary string
AiSummarized bool
2025-01-02 16:21:02 +01:00
}
2024-12-27 22:34:43 +01:00
2025-01-12 19:57:54 +01:00
type ArticlePageViewModel struct {
SourceUrl string
ShortSource string
PublishDate string
Title string
Content string
AiSummary string
}
2025-01-02 16:21:02 +01:00
// TODO docstring
func (a *Article) ViewModel() *ArticleViewModel {
2025-01-07 15:26:26 +01:00
summary := a.AiSummary
if summary == "" {
if len(a.Content) > 200 {
summary = a.Content[:200]
} else {
summary = a.Content
}
2025-01-07 11:59:10 +01:00
}
2025-01-02 16:21:02 +01:00
2025-01-07 11:59:10 +01:00
short_url := ""
2025-01-06 18:45:44 +01:00
parsedURL, err := url.Parse(a.SourceUrl)
2025-01-07 11:59:10 +01:00
if err == nil {
short_url = parsedURL.Hostname()
}
return &ArticleViewModel{
2025-01-12 19:57:54 +01:00
Id: a.Id,
2025-01-07 15:26:26 +01:00
Title: a.Title,
PublishDate: a.PublishDate.Local().Format("02.01.2006"),
ShortSource: short_url,
Summary: summary,
AiSummarized: a.AiSummary != "",
2025-01-07 11:59:10 +01:00
}
2024-12-27 03:25:44 +01:00
}
2025-01-12 19:57:54 +01:00
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,
}
}