81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
// Copyright (c) Mainflux
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package readers
|
|
|
|
import "errors"
|
|
|
|
const (
|
|
// EqualKey represents the equal comparison operator key.
|
|
EqualKey = "eq"
|
|
// LowerThanKey represents the lower-than comparison operator key.
|
|
LowerThanKey = "lt"
|
|
// LowerThanEqualKey represents the lower-than-or-equal comparison operator key.
|
|
LowerThanEqualKey = "le"
|
|
// GreaterThanKey represents the greater-than-or-equal comparison operator key.
|
|
GreaterThanKey = "gt"
|
|
// GreaterThanEqualKey represents the greater-than-or-equal comparison operator key.
|
|
GreaterThanEqualKey = "ge"
|
|
)
|
|
|
|
// ErrReadMessages indicates failure occurred while reading messages from database.
|
|
var ErrReadMessages = errors.New("failed to read messages from database")
|
|
|
|
// MessageRepository specifies message reader API.
|
|
type MessageRepository interface {
|
|
// ReadAll skips given number of messages for given channel and returns next
|
|
// limited number of messages.
|
|
ReadAll(chanID string, pm PageMetadata) (MessagesPage, error)
|
|
}
|
|
|
|
// Message represents any message format.
|
|
type Message interface{}
|
|
|
|
// MessagesPage contains page related metadata as well as list of messages that
|
|
// belong to this page.
|
|
type MessagesPage struct {
|
|
PageMetadata
|
|
Total uint64
|
|
Messages []Message
|
|
}
|
|
|
|
// PageMetadata represents the parameters used to create database queries.
|
|
type PageMetadata struct {
|
|
Offset uint64 `json:"offset"`
|
|
Limit uint64 `json:"limit"`
|
|
Subtopic string `json:"subtopic,omitempty"`
|
|
Publisher string `json:"publisher,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Value float64 `json:"v,omitempty"`
|
|
Comparator string `json:"comparator,omitempty"`
|
|
BoolValue bool `json:"vb,omitempty"`
|
|
StringValue string `json:"vs,omitempty"`
|
|
DataValue string `json:"vd,omitempty"`
|
|
From float64 `json:"from,omitempty"`
|
|
To float64 `json:"to,omitempty"`
|
|
Format string `json:"format,omitempty"`
|
|
}
|
|
|
|
// ParseValueComparator convert comparison operator keys into mathematic anotation.
|
|
func ParseValueComparator(query map[string]interface{}) string {
|
|
comparator := "="
|
|
val, ok := query["comparator"]
|
|
if ok {
|
|
switch val.(string) {
|
|
case EqualKey:
|
|
comparator = "="
|
|
case LowerThanKey:
|
|
comparator = "<"
|
|
case LowerThanEqualKey:
|
|
comparator = "<="
|
|
case GreaterThanKey:
|
|
comparator = ">"
|
|
case GreaterThanEqualKey:
|
|
comparator = ">="
|
|
}
|
|
}
|
|
|
|
return comparator
|
|
}
|