本文整理汇总了Golang中socialapi/request.Query类的典型用法代码示例。如果您正苦于以下问题:Golang Query类的具体用法?Golang Query怎么用?Golang Query使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Query类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: isInChannel
func (c *ChannelMessage) isInChannel(query *request.Query, channelName string) (bool, error) {
if c.Id == 0 {
return false, ErrChannelMessageIdIsNotSet
}
// fetch channel by group name
query.Name = query.GroupName
if query.GroupName == "koding" {
query.Name = channelName
}
ch := NewChannel()
channel, err := ch.ByName(query)
if err != nil {
return false, err
}
if channel.Id == 0 {
return false, ErrChannelIsNotSet
}
// check if message is in the channel
cml := NewChannelMessageList()
return cml.IsInChannel(c.Id, channel.Id)
}
示例2: AddReplies
func (cc *ChannelMessageContainer) AddReplies(query *request.Query) *ChannelMessageContainer {
return withChannelMessageContainerChecks(cc, func(c *ChannelMessageContainer) error {
if c.Message.TypeConstant == ChannelMessage_TYPE_REPLY {
// if message itself already a reply, no need to add replies to it
return nil
}
// fetch the replies
mr := NewMessageReply()
mr.MessageId = c.Message.Id
q := query.Clone()
q.Limit = query.ReplyLimit
q.Skip = query.ReplySkip
replies, err := mr.List(q)
if err != nil {
return err
}
// populate the replies as containers
rs := NewChannelMessageContainers()
rs.PopulateWith(replies, query)
// set channel message containers
c.Replies = *rs
return nil
})
}
示例3: OverrideQuery
// OverrideQuery overrides Query with context info
func (c *Context) OverrideQuery(q *request.Query) *request.Query {
// get group name from context
q.GroupName = c.GroupName
if c.IsLoggedIn() {
q.AccountId = c.Client.Account.Id
} else {
q.AccountId = 0
}
return q
}
示例4: updateStatus
func updateStatus(participant *models.ChannelParticipant, query *request.Query, ctx *models.Context) (*models.ChannelParticipant, error) {
if ok := ctx.IsLoggedIn(); !ok {
return nil, models.ErrNotLoggedIn
}
query.AccountId = ctx.Client.Account.Id
cp := models.NewChannelParticipant()
cp.ChannelId = query.Id
// check if the user is invited
isInvited, err := cp.IsInvited(query.AccountId)
if err != nil {
return nil, err
}
if !isInvited {
return nil, errors.New("uninvited user error")
}
cp.StatusConstant = participant.StatusConstant
// update the status
if err := cp.Update(); err != nil {
return nil, err
}
return cp, nil
}
示例5: ByName
// ByName fetches the channel by name, type_constant and group_name, it doesnt
// have the best name, but evolved to this situation :/
func (c *Channel) ByName(q *request.Query) (Channel, error) {
var channel Channel
if q.GroupName == "" {
return channel, ErrGroupNameIsNotSet
}
if q.Type == "" {
q.Type = Channel_TYPE_TOPIC
}
query := &bongo.Query{
Selector: map[string]interface{}{
"group_name": q.GroupName,
"type_constant": q.Type,
"name": q.Name,
},
Pagination: *bongo.NewPagination(q.Limit, q.Skip),
}
query.AddScope(RemoveTrollContent(c, q.ShowExempt))
err := c.One(query)
if err != nil && err != bongo.RecordNotFound {
return channel, err
}
return *c, nil
}
示例6: BySlug
// BySlug fetchs channel message by its slug
// checks if message is in the channel or not
func (c *ChannelMessage) BySlug(query *request.Query) error {
if query.Slug == "" {
return ErrSlugIsNotSet
}
// fetch message itself
q := &bongo.Query{
Selector: map[string]interface{}{
"slug": query.Slug,
},
}
q.AddScope(RemoveTrollContent(
c, query.ShowExempt,
))
if err := c.One(q); err != nil {
return err
}
query.Type = Channel_TYPE_GROUP
res, err := c.isInChannel(query, "public")
if err != nil {
return err
}
if res {
return nil
}
query.Type = Channel_TYPE_ANNOUNCEMENT
res, err = c.isInChannel(query, "changelog")
if err != nil {
return err
}
if !res {
return bongo.RecordNotFound
}
return nil
}
示例7: FetchMessagesByChannelId
func (c *ChannelMessage) FetchMessagesByChannelId(channelId int64, q *request.Query) ([]ChannelMessage, error) {
q.GroupChannelId = channelId
query := generateMessageListQuery(q)
query.Sort = map[string]string{
"created_at": "DESC",
}
var messages []ChannelMessage
if err := c.Some(&messages, query); err != nil {
return nil, err
}
if messages == nil {
return make([]ChannelMessage, 0), nil
}
return messages, nil
}
示例8: ByParticipants
// ByParticipants fetches the channels by their respective participants
func (c *Channel) ByParticipants(participants []int64, q *request.Query) ([]Channel, error) {
if q.GroupName == "" {
return nil, ErrGroupNameIsNotSet
}
if len(participants) == 0 {
return nil, ErrChannelParticipantIsNotSet
}
if q.Type == "" {
q.Type = Channel_TYPE_PRIVATE_MESSAGE
}
var channelIds []int64
cp := NewChannelParticipant()
err := bongo.B.DB.
Model(cp).
Table(cp.BongoName()).
Joins(
`left join api.channel on
api.channel_participant.channel_id = api.channel.id`).
Where(
`api.channel_participant.account_id IN ( ? ) and
api.channel_participant.status_constant = ? and
api.channel.group_name = ? and
api.channel.deleted_at < '0001-01-02 00:00:00+00' and
api.channel.type_constant = ?`,
participants,
ChannelParticipant_STATUS_ACTIVE,
q.GroupName,
q.Type,
).
Group("channel_participant.channel_id, channel.created_at").
Having("COUNT (channel_participant.channel_id) = ?", len(participants)).
Order("channel.created_at").
Limit(q.Limit).
Offset(q.Skip).
Pluck("api.channel_participant.channel_id", &channelIds).Error
if err != nil {
return nil, err
}
return c.FetchByIds(channelIds)
}
示例9: getUserChannelsQuery
func getUserChannelsQuery(q *request.Query) *gorm.DB {
c := models.NewChannel()
if q.Type == "" {
q.Type = models.Channel_TYPE_PRIVATE_MESSAGE
}
return bongo.B.DB.
Model(c).
Table(c.BongoName()).
Select("api.channel_participant.channel_id").
Joins("left join api.channel_participant on api.channel_participant.channel_id = api.channel.id").
Where("api.channel_participant.account_id = ? and "+
"api.channel.group_name = ? and "+
"api.channel.type_constant = ? and "+
"api.channel_participant.status_constant = ?",
q.AccountId,
q.GroupName,
q.Type,
models.ChannelParticipant_STATUS_ACTIVE)
}
示例10: Search
func (c *Channel) Search(q *request.Query) ([]Channel, error) {
if q.GroupName == "" {
return nil, ErrGroupNameIsNotSet
}
if q.Type == "" {
q.Type = Channel_TYPE_TOPIC
}
var channels []Channel
bongoQuery := &bongo.Query{
Selector: map[string]interface{}{
"group_name": q.GroupName,
"type_constant": q.Type,
},
Pagination: *bongo.NewPagination(q.Limit, q.Skip),
}
bongoQuery.AddScope(RemoveTrollContent(c, q.ShowExempt))
query := bongo.B.BuildQuery(c, bongoQuery)
// use 'ilike' for case-insensitive search
query = query.Where("name ilike ?", "%"+q.Name+"%")
if err := bongo.CheckErr(
query.Find(&channels),
); err != nil {
return nil, err
}
if channels == nil {
return make([]Channel, 0), nil
}
return channels, nil
}
示例11: TestPrivateMesssages
//.........这里部分代码省略.........
pmr.Body = "this is @sinan a body for @devrim private message"
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
So(cmc, ShouldNotBeNil)
So(len(cmc.ParticipantsPreview), ShouldEqual, 3)
})
Convey("private message response should have last Message", func() {
body := "hi @devrim this is a body for private message also for @sinan"
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = body
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
So(cmc, ShouldNotBeNil)
So(cmc.LastMessage.Message.Body, ShouldEqual, body)
})
Convey("private message should be listed by all recipients", func() {
body := "hi @devrim this is a body for private message also for @sinan"
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = body
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
So(cmc, ShouldNotBeNil)
pm, err := rest.GetPrivateChannels(&request.Query{AccountId: account.Id, GroupName: groupName}, ses.ClientId)
So(err, ShouldBeNil)
So(pm, ShouldNotBeNil)
So(len(pm), ShouldNotEqual, 0)
So(pm[0], ShouldNotBeNil)
So(pm[0].Channel.TypeConstant, ShouldEqual, models.Channel_TYPE_PRIVATE_MESSAGE)
So(pm[0].Channel.Id, ShouldEqual, cmc.Channel.Id)
So(pm[0].Channel.GroupName, ShouldEqual, cmc.Channel.GroupName)
So(pm[0].LastMessage.Message.Body, ShouldEqual, cmc.LastMessage.Message.Body)
So(pm[0].Channel.PrivacyConstant, ShouldEqual, models.Channel_PRIVACY_PRIVATE)
So(len(pm[0].ParticipantsPreview), ShouldEqual, 3)
So(pm[0].IsParticipant, ShouldBeTrue)
})
Convey("user should be able to search private messages via purpose field", func() {
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = "search private messages"
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
pmr.Purpose = "test me up"
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
query := request.Query{AccountId: account.Id, GroupName: groupName}
_, err = rest.SearchPrivateChannels(&query, ses.ClientId)
So(err, ShouldNotBeNil)
query.Name = "test"
pm, err := rest.SearchPrivateChannels(&query, ses.ClientId)
So(err, ShouldBeNil)
示例12: TestCollaborationChannels
//.........这里部分代码省略.........
Convey("send response should have last Message", func() {
body := "hi @devrim this is a body for private message also for @sinan"
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = body
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
pmr.TypeConstant = models.Channel_TYPE_COLLABORATION
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
So(cmc, ShouldNotBeNil)
So(cmc.LastMessage.Message.Body, ShouldEqual, body)
})
Convey("channel messages should be listed by all recipients", func() {
// // use a different group name
// // in order not to interfere with another request
// groupName := "testgroup" + strconv.FormatInt(rand.Int63(), 10)
body := "hi @devrim this is a body for private message also for @sinan"
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = body
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
pmr.TypeConstant = models.Channel_TYPE_COLLABORATION
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)
So(cmc, ShouldNotBeNil)
query := &request.Query{
AccountId: account.Id,
GroupName: groupName,
Type: models.Channel_TYPE_COLLABORATION,
}
pm, err := rest.GetPrivateChannels(query, ses.ClientId)
So(err, ShouldBeNil)
So(pm, ShouldNotBeNil)
So(len(pm), ShouldNotEqual, 0)
So(pm[0], ShouldNotBeNil)
So(pm[0].Channel.TypeConstant, ShouldEqual, models.Channel_TYPE_COLLABORATION)
So(pm[0].Channel.Id, ShouldEqual, cmc.Channel.Id)
So(pm[0].Channel.GroupName, ShouldEqual, cmc.Channel.GroupName)
So(pm[0].LastMessage.Message.Body, ShouldEqual, cmc.LastMessage.Message.Body)
So(pm[0].Channel.PrivacyConstant, ShouldEqual, models.Channel_PRIVACY_PRIVATE)
So(len(pm[0].ParticipantsPreview), ShouldEqual, 3)
So(pm[0].IsParticipant, ShouldBeTrue)
})
Convey("user should be able to search collaboration channels via purpose field", func() {
pmr := models.ChannelRequest{}
pmr.AccountId = account.Id
pmr.Body = "search collaboration channel"
pmr.GroupName = groupName
pmr.Recipients = []string{"sinan", "devrim"}
pmr.Purpose = "test me up"
pmr.TypeConstant = models.Channel_TYPE_COLLABORATION
cmc, err := rest.SendPrivateChannelRequest(pmr, ses.ClientId)
So(err, ShouldBeNil)