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