3
0
Files
corteza/sam/rest/search.go

49 lines
1.1 KiB
Go

package rest
import (
"context"
"github.com/crusttech/crust/internal/payload"
"github.com/crusttech/crust/internal/payload/outgoing"
"github.com/crusttech/crust/sam/rest/request"
"github.com/crusttech/crust/sam/service"
"github.com/crusttech/crust/sam/types"
"github.com/pkg/errors"
)
var _ = errors.Wrap
type Search struct {
svc struct {
msg service.MessageService
}
}
func (Search) New() *Search {
ctrl := &Search{}
ctrl.svc.msg = service.DefaultMessage
return ctrl
}
func (ctrl *Search) Messages(ctx context.Context, r *request.SearchMessages) (interface{}, error) {
return ctrl.wrapSet(ctx)(ctrl.svc.msg.With(ctx).Find(&types.MessageFilter{
Query: r.Query,
ChannelID: r.InChannel,
UserID: r.FromUser,
FirstID: r.FirstID,
LastID: r.LastID,
}))
}
func (ctrl *Search) wrapSet(ctx context.Context) func(mm types.MessageSet, err error) (*outgoing.MessageSet, error) {
return func(mm types.MessageSet, err error) (*outgoing.MessageSet, error) {
if err != nil {
return nil, err
} else {
return payload.Messages(ctx, mm), nil
}
}
}