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 } }
// 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) }