Ejemplo n.º 1
0
Archivo: presences.go Proyecto: ovh/tat
func (m *PresencesController) create(ctx *gin.Context) {
	presenceIn, topic, user, e := m.preCheckTopic(ctx)
	if e != nil {
		return
	}

	var presence = tat.Presence{}
	if err := presenceDB.Upsert(&presence, *user, topic, presenceIn.Status); err != nil {
		log.Errorf("Error while InsertPresence %s", err)
		ctx.AbortWithError(http.StatusInternalServerError, err)
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
}
Ejemplo n.º 2
0
Archivo: messages.go Proyecto: ovh/tat
// List messages on one topic, with given criteria
func (m *MessagesController) List(ctx *gin.Context) {
	out, user, topic, criteria, httpCode, err := m.innerList(ctx)

	if err != nil {
		ctx.JSON(httpCode, gin.H{"error": err.Error()})
		return
	}

	if criteria.OnlyCount == tat.True {
		count, e := messageDB.CountMessages(criteria, user.Username, topic)
		if e != nil {
			ctx.JSON(http.StatusInternalServerError, gin.H{"error": e.Error()})
			return
		}
		ctx.JSON(http.StatusOK, &tat.MessagesCountJSON{Count: count})
		return
	}

	// send presence
	presenceArg := ctx.Query("presence")
	if presenceArg != "" && !user.IsSystem {
		go func() {
			var presence = tat.Presence{}
			if e := presenceDB.Upsert(&presence, user, topic, presenceArg); e != nil {
				log.Errorf("Error while InsertPresence %s", e)
			}
		}()
	}

	messages, err := messageDB.ListMessages(criteria, user.Username, topic)
	if err != nil {
		ctx.JSON(http.StatusForbidden, gin.H{"error": err.Error()})
	}
	out.Messages = messages
	ctx.JSON(http.StatusOK, out)

}