forked from jshiffer/matterbridge
74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/labstack/echo"
|
|
"github.com/labstack/echo/cookbook/twitter/model"
|
|
mgo "gopkg.in/mgo.v2"
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
func (h *Handler) CreatePost(c echo.Context) (err error) {
|
|
u := &model.User{
|
|
ID: bson.ObjectIdHex(userIDFromToken(c)),
|
|
}
|
|
p := &model.Post{
|
|
ID: bson.NewObjectId(),
|
|
From: u.ID.Hex(),
|
|
}
|
|
if err = c.Bind(p); err != nil {
|
|
return
|
|
}
|
|
|
|
// Validation
|
|
if p.To == "" || p.Message == "" {
|
|
return &echo.HTTPError{Code: http.StatusBadRequest, Message: "invalid to or message fields"}
|
|
}
|
|
|
|
// Find user from database
|
|
db := h.DB.Clone()
|
|
defer db.Close()
|
|
if err = db.DB("twitter").C("users").FindId(u.ID).One(u); err != nil {
|
|
if err == mgo.ErrNotFound {
|
|
return echo.ErrNotFound
|
|
}
|
|
return
|
|
}
|
|
|
|
// Save post in database
|
|
if err = db.DB("twitter").C("posts").Insert(p); err != nil {
|
|
return
|
|
}
|
|
return c.JSON(http.StatusCreated, p)
|
|
}
|
|
|
|
func (h *Handler) FetchPost(c echo.Context) (err error) {
|
|
userID := userIDFromToken(c)
|
|
page, _ := strconv.Atoi(c.QueryParam("page"))
|
|
limit, _ := strconv.Atoi(c.QueryParam("limit"))
|
|
|
|
// Defaults
|
|
if page == 0 {
|
|
page = 1
|
|
}
|
|
if limit == 0 {
|
|
limit = 100
|
|
}
|
|
|
|
// Retrieve posts from database
|
|
posts := []*model.Post{}
|
|
db := h.DB.Clone()
|
|
if err = db.DB("twitter").C("posts").
|
|
Find(bson.M{"to": userID}).
|
|
Skip((page - 1) * limit).
|
|
Limit(limit).
|
|
All(&posts); err != nil {
|
|
return
|
|
}
|
|
defer db.Close()
|
|
|
|
return c.JSON(http.StatusOK, posts)
|
|
}
|