Diff between 8191139327922a8c5ee4784205d6528b5661e8c0 and 95d5a1e25387ab76e732df7615acf986717b2f22

Changed Files

File Additions Deletions Status
internal/database/queries.go +41 -0 modified
main.go +23 -0 modified
web/templates/article.html +46 -0 added
web/templates/index.html +2 -2 modified

Full Patch

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" }}
+<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
@@ -14,7 +14,7 @@
                 Uutiset
             </a>
             {{ range .Categories}}
-				<a href="{{ .Name }}">{{ .Name }}</a>
+				<a href="/{{ .Name }}">{{ .Name }}</a>
 			{{ end }}
             <a href="/">
                 Sanajuuri
@@ -27,7 +27,7 @@
     </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">