-
-
Notifications
You must be signed in to change notification settings - Fork 37
/
articles.go
105 lines (90 loc) · 2.17 KB
/
articles.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
package articles
import (
"net/http"
"time"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"github.com/gin-gonic/gin"
"github.com/madhums/go-gin-mgo-demo/models"
)
// New article
func New(c *gin.Context) {
article := models.Article{}
c.HTML(http.StatusOK, "articles/form", gin.H{
"title": "New article",
"article": article,
})
}
// Create an article
func Create(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
article := models.Article{}
err := c.Bind(&article)
if err != nil {
c.Error(err)
return
}
err = db.C(models.CollectionArticle).Insert(article)
if err != nil {
c.Error(err)
}
c.Redirect(http.StatusMovedPermanently, "/articles")
}
// Edit an article
func Edit(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
article := models.Article{}
oID := bson.ObjectIdHex(c.Param("_id"))
err := db.C(models.CollectionArticle).FindId(oID).One(&article)
if err != nil {
c.Error(err)
}
c.HTML(http.StatusOK, "articles/form", gin.H{
"title": "Edit article",
"article": article,
})
}
// List all articles
func List(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
articles := []models.Article{}
err := db.C(models.CollectionArticle).Find(nil).Sort("-updated_on").All(&articles)
if err != nil {
c.Error(err)
}
c.HTML(http.StatusOK, "articles/list", gin.H{
"title": "Articles",
"articles": articles,
})
}
// Update an article
func Update(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
article := models.Article{}
err := c.Bind(&article)
if err != nil {
c.Error(err)
return
}
query := bson.M{"_id": bson.ObjectIdHex(c.Param("_id"))}
doc := bson.M{
"title": article.Title,
"body": article.Body,
"updated_on": time.Now().UnixNano() / int64(time.Millisecond),
}
err = db.C(models.CollectionArticle).Update(query, doc)
if err != nil {
c.Error(err)
}
c.Redirect(http.StatusMovedPermanently, "/articles")
}
// Delete an article
func Delete(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
query := bson.M{"_id": bson.ObjectIdHex(c.Param("_id"))}
err := db.C(models.CollectionArticle).Remove(query)
if err != nil {
c.Error(err)
}
c.Redirect(http.StatusMovedPermanently, "/articles")
}