/
products.go
98 lines (89 loc) · 2.24 KB
/
products.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
package controllers
import (
"github.com/revel/revel"
"github.com/leightonwong/api-simulator/app/models"
"time"
)
type Products struct {
App
}
func (p Products) Index() revel.Result {
results, err := p.Txn.Select(models.Product{}, `select * from product`)
if err != nil {
panic(err)
}
var products []*models.Product
for _, r := range results {
p := r.(*models.Product)
products = append(products, p)
}
return p.Render(products)
}
func (p Products) List(size, page int) revel.Result {
if page <= 0 {
page = 1
}
if size <= 0 {
size = 10
}
var products []*models.Product
results, err := p.Txn.Select(models.Product{}, `select * from product limit ?, ?`, (page-1)*size, size)
if err != nil {
panic(err)
}
for _, r := range results {
p := r.(*models.Product)
products = append(products, p)
}
previousPage := page - 1
nextPage := page + 1
total, err := p.Txn.SelectInt(`select count(*) from product`)
if err != nil {
panic(err)
}
if previousPage <= 0 {
previousPage = 1
}
if page*size >= int(total) {
nextPage = page
}
return p.Render(products, previousPage, nextPage, total)
}
func (p Products) Add(name, description string) revel.Result {
p.Validation.Required(name)
p.Validation.Required(description)
product := models.Product{Name: name, Description: description, CreateAt: time.Now()}
err := p.Txn.Insert(&product)
if err != nil {
panic(err)
}
return p.Redirect(Products.List, 10, 1)
}
func (p Products) Edit(id, name, description string) revel.Result {
p.Validation.Required(name)
p.Validation.Required(description)
_, err := p.Txn.Exec(`update product set name = ? , description = ? where id = ?`, name, description, id)
if err != nil {
panic(err)
}
return p.Redirect(Products.List, 10, 1)
}
func (p Products) Detail(id string) revel.Result {
var product *models.Product = &models.Product{}
err := p.Txn.SelectOne(product, "select * from product where id = ?", id)
if err != nil {
panic(err)
}
//product := result.(*models.Product)
return p.Render(product)
}
func (p Products) Del(id string) revel.Result {
_, err := p.Txn.Exec("delete from product where id = ?", id)
if err != nil {
panic(err)
}
return p.Redirect(Products.List, 10, 1)
}
func (p Products) New() revel.Result {
return p.Render()
}