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
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 {
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
})
})
+ 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
+{{ define "article.html" }}
+<html lang="fi">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>{{.Article.Title}}</title>
+ <script src="/static/theme.js"></script>
+ <link rel="stylesheet" href="/static/styles.css">
+</head>
+<body>
+ <header>
+ <nav style="display: flex; gap: 20px;">
+ <a href="/">
+ Uutiset
+ </a>
+ {{ range .Categories}}
+ <a href="/{{ .Name }}">{{ .Name }}</a>
+ {{ end }}
+ <a href="/">
+ Sanajuuri
+ </a>
+ </nav>
+ <nav id="theme-nav">
+ <button id="theme-button" class="theme-button">mirri
+ </button>
+ </nav>
+ </header>
+ <main class="article-container" style="max-width: 800px;">
+ <article>
+ <img src="{{.Article.Picture}}" class="uutis-kuva">
+ <div>
+ <h2>
+ {{ .Article.Title }}
+ </h2>
+ <p>
+ {{ .Article.Description}}
+ </p>
+ </div>
+ <p>
+ {{ .Article.Content }}
+ </p>
+ </article>
+ </main>
+</body>
+</html>
+{{ 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
Uutiset
</a>
{{ range .Categories}}
- <a href="{{ .Name }}">{{ .Name }}</a>
+ <a href="/{{ .Name }}">{{ .Name }}</a>
{{ end }}
<a href="/">
Sanajuuri
</header>
<main class="uutis-lista">
{{range .Articles}}
- <a href="{{.URI}}">
+ <a href="/artikkeli/{{.URI}}">
<article class="uutis-kortti">
<img src="{{.Picture}}" class="uutis-kuva">
<div class="uutis-tiedot">