func (m *MessagesController) likeOrUnlike(ctx *gin.Context, action string, message models.Message, topic models.Topic, user models.User) { isReadAccess := topic.IsUserReadAccess(user) if !isReadAccess { ctx.AbortWithError(http.StatusInternalServerError, errors.New("No Read Access to topic "+message.Topics[0])) return } info := "" if action == "like" { err := message.Like(user) if err != nil { log.Errorf("Error while like a message %s", err) ctx.AbortWithError(http.StatusInternalServerError, err) return } info = "like added" } else if action == "unlike" { err := message.Unlike(user) if err != nil { log.Errorf("Error while like a message %s", err) ctx.AbortWithError(http.StatusInternalServerError, err) return } info = "like removed" } else { ctx.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Invalid action : " + action)}) return } go models.WSMessage(&models.WSMessageJSON{Action: action, Username: user.Username, Message: message}) ctx.JSON(http.StatusCreated, gin.H{"info": info}) }