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
)
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
}
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
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
+<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
<html>
{{range .Articles}}
- {{ .Otsikko }}<br />
+ {{ .}}<br />
+ {{end}}
+ {{range .Categories}}
+ {{ .Name }}<br />
{{end}}
</html>
\ No newline at end of file