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-07 11:59:10 +01:00
|
|
|
Identifier int
|
|
|
|
|
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-02 16:21:02 +01:00
|
|
|
// TODO docstring
|
|
|
|
|
type ArticleViewModel struct {
|
2025-01-07 15:26:26 +01:00
|
|
|
Title string
|
|
|
|
|
PublishDate string
|
|
|
|
|
SourceUrl 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-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-07 15:26:26 +01:00
|
|
|
Title: a.Title,
|
|
|
|
|
PublishDate: a.PublishDate.Local().Format("02.01.2006"),
|
|
|
|
|
SourceUrl: a.SourceUrl,
|
|
|
|
|
ShortSource: short_url,
|
|
|
|
|
Summary: summary,
|
|
|
|
|
AiSummarized: a.AiSummary != "",
|
2025-01-07 11:59:10 +01:00
|
|
|
}
|
2024-12-27 03:25:44 +01:00
|
|
|
}
|