// Create a new message on one topic func (m *MessagesController) Create(ctx *gin.Context) { messageIn, messageReference, topic, e := m.preCheckTopic(ctx) if e != nil { return } user, e := PreCheckUser(ctx) if e != nil { return } isRw := topic.IsUserRW(&user) if !isRw { ctx.JSON(http.StatusForbidden, gin.H{"error": fmt.Sprintf("No RW Access to topic " + messageIn.Topic)}) return } var message = models.Message{} info := "" if messageIn.Action == "bookmark" { var originalUser = models.User{} err := originalUser.FindByUsername(utils.GetCtxUsername(ctx)) if err != nil { ctx.AbortWithError(http.StatusInternalServerError, errors.New("Error while fetching original user.")) return } err = message.Insert(originalUser, topic, messageReference.Text, "", -1) if err != nil { log.Errorf("Error while InsertMessage with action %s : %s", messageIn.Action, err) ctx.AbortWithError(http.StatusInternalServerError, errors.New(err.Error())) return } info = fmt.Sprintf("New Bookmark created in %s", topic.Topic) } else { err := message.Insert(user, topic, messageIn.Text, messageIn.IDReference, messageIn.DateCreation) if err != nil { log.Errorf("Error while InsertMessage %s", err) ctx.AbortWithError(http.StatusInternalServerError, errors.New(err.Error())) return } go models.WSMessageNew(&models.WSMessageNewJSON{Topic: topic.Topic}) info = fmt.Sprintf("Message created in %s", topic.Topic) } out := &messageJSONOut{Message: message, Info: info} go models.WSMessage(&models.WSMessageJSON{Action: "create", Username: user.Username, Message: message}) ctx.JSON(http.StatusCreated, out) }