diff --git a/src/assets/templates/articlePage.html b/src/assets/templates/articlePage.html index 40ba206..00e567e 100644 --- a/src/assets/templates/articlePage.html +++ b/src/assets/templates/articlePage.html @@ -9,10 +9,10 @@
{{ .ArticlePageVM.Title }}
-
+

Datum{{ .ArticlePageVM.PublishDate }}

Quelle{{ .ArticlePageVM.ShortSource }}

-

TLDR{{ .ArticlePageVM.AiSummary }}

+

TLDR{{ .ArticlePageVM.Summary }}

Inhalt{{ .ArticlePageVM.Content }}

diff --git a/src/internal/app/app.go b/src/internal/app/app.go index 9f6697d..9c9f138 100644 --- a/src/internal/app/app.go +++ b/src/internal/app/app.go @@ -7,16 +7,18 @@ import ( ) type App struct { - articles *database.ArticleRepository - articleVMs *database.ArticleViewModelRepository - rssItems *database.RSSItemRepository + articles *database.ArticleRepository + articleVMs *database.ArticleViewModelRepository + articlePageVMs *database.ArticlePageViewModelRepository + rssItems *database.RSSItemRepository } func NewApp(db *sql.DB) *App { return &App{ - articles: &database.ArticleRepository{DB: db}, - articleVMs: &database.ArticleViewModelRepository{DB: db}, - rssItems: &database.RSSItemRepository{DB: db}, + articles: &database.ArticleRepository{DB: db}, + articleVMs: &database.ArticleViewModelRepository{DB: db}, + articlePageVMs: &database.ArticlePageViewModelRepository{DB: db}, + rssItems: &database.RSSItemRepository{DB: db}, } } diff --git a/src/internal/app/article.go b/src/internal/app/article.go index 81f56e2..1776a48 100644 --- a/src/internal/app/article.go +++ b/src/internal/app/article.go @@ -17,7 +17,7 @@ func (app *App) Article(w http.ResponseWriter, req *http.Request) { } // get articles - article, err := app.articles.ById(int64(id)) + articlePageVM, err := app.articlePageVMs.ById(int64(id)) if err != nil { // treat as no result http.Error(w, err.Error(), http.StatusInternalServerError) @@ -32,7 +32,7 @@ func (app *App) Article(w http.ResponseWriter, req *http.Request) { data := map[string]interface{}{ "SelectedNavItemArticle": false, - "ArticlePageVM": article.PageViewModel(), + "ArticlePageVM": articlePageVM, } err = t.ExecuteTemplate(w, "base", data) if err != nil { diff --git a/src/internal/model/article.go b/src/internal/model/article.go index 96782be..d88b002 100644 --- a/src/internal/model/article.go +++ b/src/internal/model/article.go @@ -39,32 +39,32 @@ type ArticlePageViewModel struct { PublishDate string Title string Content string - AiSummary string + Summary string } // TODO docstring -func (a *Article) ViewModel() *ArticleViewModel { - var summary string - 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, - } -} +//func (a *Article) ViewModel() *ArticleViewModel { +// var summary string +// 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, +// } +//} func (a *Article) PageViewModel() *ArticlePageViewModel { summary := "N/A" @@ -81,6 +81,6 @@ func (a *Article) PageViewModel() *ArticlePageViewModel { Title: a.Title, PublishDate: a.PublishDate.Local().Format("02.01.2006 15:04"), Content: a.Content, - AiSummary: summary, + Summary: summary, } } diff --git a/src/internal/model/database/articlepageviewmodelrepository.go b/src/internal/model/database/articlepageviewmodelrepository.go new file mode 100644 index 0000000..c788f2e --- /dev/null +++ b/src/internal/model/database/articlepageviewmodelrepository.go @@ -0,0 +1,38 @@ +package database + +import ( + "crowsnest/internal/model" + "database/sql" + "net/url" +) + +type ArticlePageViewModelRepository struct { + DB *sql.DB +} + +// Gets all the view model for the article pages given a article id. This may +// throw an error if the connection to the database fails. +func (m *ArticlePageViewModelRepository) ById(id int64) (*model.ArticlePageViewModel, error) { + stmt := ` + SELECT a.sourceUrl, a.publishDate, a.title, a.content, d.summary + FROM articles a JOIN documents d ON a.document_id = d.id + WHERE a.id = $1 + ` + + rows := m.DB.QueryRow(stmt, id) + + a := &model.ArticlePageViewModel{} + if err := rows.Scan(&a.SourceUrl, &a.PublishDate, &a.Title, &a.Content, &a.Summary); err != nil { + return nil, err + } + + // short url + parsedURL, err := url.Parse(a.SourceUrl) + if err == nil { + a.ShortSource = parsedURL.Hostname() + } else { + a.ShortSource = "" + } + + return a, nil +} diff --git a/src/internal/model/database/articleviewmodelrepository.go b/src/internal/model/database/articleviewmodelrepository copy.go similarity index 100% rename from src/internal/model/database/articleviewmodelrepository.go rename to src/internal/model/database/articleviewmodelrepository copy.go