Diff between 803b67d1ef6bdf7840fef3452e848a18c91c37fa and 46cbef78e85028d6eabe309f447755e82c34d3f2

Changed Files

File Additions Deletions Status
internal/database/queries.go +54 -7 modified
main.go +22 -0 modified
templates/category.tmpl +5 -0 added
templates/index.tmpl +4 -1 modified

Full Patch

diff --git a/internal/database/queries.go b/internal/database/queries.go
index 3f1abb9..75e7267 100644
--- a/internal/database/queries.go
+++ b/internal/database/queries.go
@@ -7,15 +7,62 @@ import (
 )
 
 type Article struct {
-	Id        int
-	Otsikko   string
-	Teksti    string
-	Kuva      string
-	Kategoria string
+	Id       int
+	Title    string
+	Content  string
+	Picture  string
+	Category string
+}
+
+type Category struct {
+	Id   int
+	Name string
 }
 
 func GetArticles(db *sql.DB) ([]Article, error) {
-	rows, err := db.Query("SELECT * FROM uutinen")
+	rows, err := db.Query("SELECT article_id, article_title, article_content, article_picture, category_name FROM articles INNER JOIN categories ON articles.category_id = categories.category_id;")
+	if err != nil {
+		return nil, err
+	}
+	articles := []Article{}
+
+	for rows.Next() {
+		article := Article{}
+		if err := rows.Scan(&article.Id, &article.Title, &article.Content, &article.Picture, &article.Category); err != nil {
+			return nil, err
+		}
+		articles = append(articles, article)
+	}
+
+	return articles, nil
+}
+
+func GetCategories(db *sql.DB) ([]Category, error) {
+	rows, err := db.Query("SELECT * FROM categories")
+	if err != nil {
+		return nil, err
+	}
+	categories := []Category{}
+
+	for rows.Next() {
+		category := Category{}
+		if err := rows.Scan(&category.Id, &category.Name); err != nil {
+			return nil, err
+		}
+		categories = append(categories, category)
+	}
+
+	return categories, nil
+}
+
+func GetCategoryArticles(db *sql.DB, category string) ([]Article, error) {
+	stmtOut, err := db.Prepare("SELECT article_id, article_title, article_content, article_picture, category_name FROM articles INNER JOIN categories ON articles.category_id = categories.category_id WHERE category_name = ?;")
+	if err != nil {
+		return nil, err
+	}
+	defer stmtOut.Close()
+
+	rows, err := stmtOut.Query(category)
 	if err != nil {
 		return nil, err
 	}
@@ -23,7 +70,7 @@ func GetArticles(db *sql.DB) ([]Article, error) {
 
 	for rows.Next() {
 		article := Article{}
-		if err := rows.Scan(&article.Id, &article.Otsikko, &article.Teksti, &article.Kuva, &article.Kategoria); err != nil {
+		if err := rows.Scan(&article.Id, &article.Title, &article.Content, &article.Picture, &article.Category); err != nil {
 			return nil, err
 		}
 		articles = append(articles, article)
diff --git a/main.go b/main.go
index 3533897..1337bee 100644
--- a/main.go
+++ b/main.go
@@ -24,7 +24,29 @@ func main() {
 			return
 		}
 
+		categories, err := database.GetCategories(db)
+
+		if err != nil {
+			c.JSON(500, gin.H{"error": err.Error()})
+			return
+		}
+
 		c.HTML(200, "index.tmpl", gin.H{
+			"Articles":   articles,
+			"Categories": categories,
+		})
+	})
+
+	router.GET("/:category", func(c *gin.Context) {
+		category := c.Param("category")
+		articles, err := database.GetCategoryArticles(db, category)
+
+		if err != nil {
+			c.JSON(500, gin.H{"error": err.Error()})
+			return
+		}
+
+		c.HTML(200, "category.tmpl", gin.H{
 			"Articles": articles,
 		})
 	})
diff --git a/templates/category.tmpl b/templates/category.tmpl
new file mode 100644
index 0000000..ec30db0
--- /dev/null
+++ b/templates/category.tmpl
@@ -0,0 +1,5 @@
+<html>
+  	{{range .Articles}}
+		{{ .}}<br />
+	{{end}}
+</html>
\ No newline at end of file
diff --git a/templates/index.tmpl b/templates/index.tmpl
index 80435be..a306960 100644
--- a/templates/index.tmpl
+++ b/templates/index.tmpl
@@ -1,5 +1,8 @@
 <html>
   	{{range .Articles}}
-		{{ .Otsikko }}<br />
+		{{ .}}<br />
+	{{end}}
+	{{range .Categories}}
+		{{ .Name }}<br />
 	{{end}}
 </html>
\ No newline at end of file