示例#1
0
func ServeCreateTopic(c gox.Context) {
	t := &Topic{}
	d := c.Request().Data
	d.AssignTo(t, "param")
	t.UserID = c.UserID()
	if len(t.Content) == 0 {
		c.SendMsg(gox.BadRequest, "missing content")
		return
	}

	if t.ChannelID > 0 {
		channel, _ := _db.GetChannel(t.ChannelID)
		if channel == nil {
			c.SendMsg(gox.NotFound, "channel not found")
			return
		}
	}

	err := _db.InsertTopic(t)
	if err != nil {
		c.SendCode(gox.ServerError)
	} else {
		_cache.SetTopic(t)
		c.SendData(gox.M{"topic": t})
	}
}
示例#2
0
func ServeGetLocalTopics(c gox.Context) {
	d := c.Request().Data
	page := d.GetInt("page")
	size := d.DGetInt("size", DefaultPageSize)
	radius := d.DGetFloat64("radius", 60)
	coord := c.Request().Header.GetCoordinate("coordinate")
	if coord == nil {
		coord = d.GetCoordinate("coordinate")
	}

	if coord == nil {
		c.SendMsg(gox.BadRequest, "missing coordinate")
		return
	}

	if page < 0 || size < 0 {
		c.SendCode(gox.BadRequest)
		return
	}

	order := TopicListOrder(d.DGetInt("order", int(OrderByCommentedAt)))

	topics, err := _db.GetAreaTopics(coord.GetArea(radius), page, size, order)
	if err != nil {
		c.SendCode(gox.ServerError)
	} else {
		sendTopics(c, topics)
	}
}
示例#3
0
func ServeGetUserTopics(c gox.Context) {
	d := c.Request().Data
	userID := d.DGetID("user_id", c.UserID())
	sinceID := d.GetID("since_id")
	size := d.DGetInt("size", DefaultPageSize)
	switch {
	case sinceID < 0:
		c.SendMsg(gox.BadRequest, "invalid since_id")
	case size < 0:
		c.SendMsg(gox.BadRequest, "invalid size")
	case userID <= 0:
		c.SendMsg(gox.BadRequest, "missing user_id")
	default:
		topics, err := _db.GetUserTopics(userID, sinceID, size, 0)
		if err != nil {
			c.SendCode(gox.ServerError)
		} else {
			var u *accounts.User
			for _, t := range topics {
				prepareTopic(t)
				if u == nil {
					u = t.User
				}
				t.User = nil
			}
			c.SendData(gox.M{"topics": topics, "user": u})
		}
	}
}
示例#4
0
func ServeCreateTopicComment(c gox.Context) {
	d := c.Request().Data
	cmt := &Comment{}
	d.AssignTo(cmt, "param")
	cmt.UserID = c.UserID()
	cmt.ItemID = d.GetID("topic_id")
	cmt.ItemType = ItemTypeTopic
	if cmt.ItemID == 0 && cmt.ToCommentID == 0 {
		c.SendMsg(gox.BadRequest, "missing item_id or to_comment_id")
		return
	}

	if len(cmt.Content) == 0 {
		c.SendMsg(gox.BadRequest, "missing content")
		return
	}

	if cmt.ToCommentID > 0 {
		cmt.ToComment, _ = GetComment(cmt.ToCommentID)
		if cmt.ToComment == nil || cmt.ItemType != cmt.ToComment.ItemType {
			c.SendCode(gox.NotFound)
			return
		}
		cmt.ItemID = cmt.ToComment.ItemID
	}

	t, _ := GetTopic(cmt.ItemID)
	if t == nil {
		c.SendMsg(gox.NotFound, "topic not found")
		return
	}

	err := _db.InsertComment(cmt)
	if err != nil {
		c.SendCode(gox.ServerError)
		return
	}

	prepareComment(cmt, 1)
	t.CommentsCount++
	_cache.SetTopic(t)
	_cache.SetComment(cmt)

	if _callbacks.DidRecvComment != nil {
		_callbacks.DidRecvComment(cmt)
	}
	c.SendData(gox.M{"comment": cmt})
}
示例#5
0
文件: srv.go 项目: justintan/bricks
func ServeAddImage(c gox.Context) {
	d := c.Request().Data
	id := d.GetID("album_id")
	t := d.GetInt("album_type")
	img := d.GetStr("image")

	switch {
	case id <= 0:
		c.SendMsg(gox.BadRequest, "missing album_id")
	case t <= 0:
		c.SendMsg(gox.BadRequest, "missing album_type")
	case len(img) == 0:
		c.SendMsg(gox.BadRequest, "missing image")
	default:
		err := _db.InsertImage(id, t, img)
		if err != nil {
			c.SendCode(gox.ServerError)
		} else {
			c.SendCode(gox.OK)
		}
	}
}