-
Notifications
You must be signed in to change notification settings - Fork 0
/
category.go
107 lines (80 loc) · 2.05 KB
/
category.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"net/http"
"strconv"
"github.com/labstack/echo"
)
// Category contains the info about the category of the courses
type Category struct {
ID int `json:"id,omitempty"`
Title string `json:"title,omitempty"`
Cover string `json:"cover,omitempty"`
Lang string `json:"lang,omitempty"`
}
func createCategory(c echo.Context) error {
cat := &Category{}
if err := c.Bind(cat); err != nil {
return err
}
insertCategorySQL := "INSERT INTO categories(title, cover, lang) VALUES (?,?,?)"
stmt, err := db.Prepare(insertCategorySQL)
if err != nil {
return err
}
_, err = stmt.Exec(cat.Title, cat.Cover, cat.Lang)
if err != nil {
return err
}
return c.JSON(http.StatusCreated, cat)
}
func getCategories(c echo.Context) error {
row, err := db.Query("SELECT id, title, cover, lang FROM categories")
if err != nil {
return err
}
defer row.Close()
var cat []Category = make([]Category, 0)
for row.Next() {
ct := Category{}
err = row.Scan(&ct.ID, &ct.Title, &ct.Cover, &ct.Lang)
if err != nil {
return err
}
cat = append(cat, ct)
}
return c.JSON(http.StatusOK, cat)
}
func getCategoryByID(c echo.Context) error {
id, _ := strconv.Atoi(c.Param("id"))
row := db.QueryRow("SELECT id, title, cover, lang FROM categories WHERE id=?", id)
cat := Category{}
row.Scan(&cat.ID, &cat.Title, &cat.Cover, &cat.Lang)
return c.JSON(http.StatusOK, cat)
}
func updateCategory(c echo.Context) error {
id, _ := strconv.Atoi(c.Param("id"))
cat := &Category{}
if err := c.Bind(&cat); err != nil {
return err
}
stmt, err := db.Prepare("UPDATE categories SET title=?, cover=?, lang=? WHERE id=?")
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(cat.Title, cat.Cover, cat.Lang, id)
if err != nil {
return err
}
return c.JSON(http.StatusOK, cat)
}
func deleteCategory(c echo.Context) error {
id, _ := strconv.Atoi(c.Param("id"))
stmt, err := db.Prepare("delete from categories where id=?")
if err != nil {
return err
}
defer stmt.Close()
stmt.Exec(id)
return c.NoContent(http.StatusOK)
}