From 95d5a1e25387ab76e732df7615acf986717b2f22 Mon Sep 17 00:00:00 2001 From: Luka Hietala Date: Thu, 20 Nov 2025 09:49:45 +0200 Subject: [PATCH] =?UTF-8?q?n=C3=A4yt=C3=A4=20article=20content?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/database/queries.go | 41 ++++++++++++++++++++++++++++++++ main.go | 23 ++++++++++++++++++ web/templates/article.html | 46 ++++++++++++++++++++++++++++++++++++ web/templates/index.html | 4 ++-- 4 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 web/templates/article.html diff --git a/internal/database/queries.go b/internal/database/queries.go index 3260504..f316e26 100644 --- a/internal/database/queries.go +++ b/internal/database/queries.go @@ -43,6 +43,29 @@ func GetArticles(db *sql.DB) ([]Article, error) { return articles, nil } +func GetArticle(db *sql.DB, uri string) (Article, error) { + stmtOut, err := db.Prepare("SELECT * FROM articles WHERE article_uri = ? LIMIT 1") + if err != nil { + return Article{}, err + } + defer stmtOut.Close() + + row := stmtOut.QueryRow(uri) + article := Article{} + + var category_id sql.NullString + + if err := row.Scan(&article.Id, &article.Title, &article.Content, &article.Picture, &category_id, &article.Description, &article.URI); err != nil { + return Article{}, err + } + + if category_id.Valid { + article.CategoryId = category_id.String + } + + return article, nil +} + func GetCategories(db *sql.DB) ([]Category, error) { rows, err := db.Query("SELECT * FROM categories") if err != nil { @@ -84,3 +107,21 @@ func GetCategoryArticles(db *sql.DB, category string) ([]Article, error) { return articles, nil } + +func AddArticle(db *sql.DB, title string, content string, picture string, description string, uri string) error { + newArticle := Article{ + Id: 0, + Title: title, + Content: content, + Picture: picture, + Description: description, + URI: uri, + } + + _, err := db.Exec("INSERT INTO articles (article_title, article_content, article_picture, article_description, article_uri) VALUES ($1, $2, $3, $4, $5)", newArticle.Title, newArticle.Content, newArticle.Picture, newArticle.Description, newArticle.URI) + if err != nil { + return err + } + + return nil +} diff --git a/main.go b/main.go index 5f884e3..431def0 100644 --- a/main.go +++ b/main.go @@ -60,6 +60,29 @@ func main() { }) }) + router.GET("/artikkeli/:uri", func(c *gin.Context) { + articleUri := c.Param("uri") + article, err := database.GetArticle(db, articleUri) + + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + + categories, err := database.GetCategories(db) + + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + + c.HTML(200, "article.html", gin.H{ + "Article": article, + "Categories": categories, + }) + + }) + router.Run() } diff --git a/web/templates/article.html b/web/templates/article.html new file mode 100644 index 0000000..cc01c45 --- /dev/null +++ b/web/templates/article.html @@ -0,0 +1,46 @@ +{{ define "article.html" }} + + + + + {{.Article.Title}} + + + + +
+ + +
+
+
+ +
+

+ {{ .Article.Title }} +

+

+ {{ .Article.Description}} +

+
+

+ {{ .Article.Content }} +

+
+
+ + +{{ end }} \ No newline at end of file diff --git a/web/templates/index.html b/web/templates/index.html index 5ac59ad..7bd79ee 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -14,7 +14,7 @@ Uutiset {{ range .Categories}} - {{ .Name }} + {{ .Name }} {{ end }} Sanajuuri @@ -27,7 +27,7 @@
{{range .Articles}} - +
-- 2.47.3