func (f *Controller) sendChannelEvent(cml *models.ChannelMessageList, cm *models.ChannelMessage, eventName string) error { cmc, err := cm.BuildEmptyMessageContainer() if err != nil { return err } return f.publishToChannel(cml.ChannelId, eventName, cmc) }
func Create(u *url.URL, h http.Header, reply *models.ChannelMessage, c *models.Context) (int, http.Header, interface{}, error) { parentId, err := request.GetURIInt64(u, "id") if err != nil { return response.NewBadRequest(err) } // fetch the parent message parent, err := models.Cache.Message.ById(parentId) if err != nil { return response.NewBadRequest(err) } parentChannel, err := models.Cache.Channel.ById(parent.InitialChannelId) if err != nil { return response.NewBadRequest(err) } canOpen, err := parentChannel.CanOpen(c.Client.Account.Id) if err != nil { return response.NewBadRequest(err) } if !canOpen { return response.NewAccessDenied(models.ErrCannotOpenChannel) } // first create reply as a message reply.TypeConstant = models.ChannelMessage_TYPE_REPLY // set initial channel id for message creation reply.InitialChannelId = parent.InitialChannelId reply.AccountId = c.Client.Account.Id if err := reply.Create(); err != nil { // todo this should be internal server error return response.NewBadRequest(err) } // then add this message as a reply to a parent message mr := models.NewMessageReply() mr.MessageId = parentId mr.ReplyId = reply.Id mr.CreatedAt = reply.CreatedAt mr.ClientRequestId = reply.ClientRequestId if err := mr.Create(); err != nil { // todo this should be internal server error return response.NewBadRequest(err) } return response.HandleResultAndError( reply.BuildEmptyMessageContainer(), ) }