1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-29 13:49:28 +08:00
Dušan Borovčanin f50335ab33 MF-919 - Mainflux message updates (#924)
* Remove RawMessage

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove Normalizer

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update tests

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Replace normalizer with senml-transformer

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Rename Transformer interface and package

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update docs

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove SenML transformer service

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove SenML Protobuf support

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix readers

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix writers tests

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Refactor tests and remove normalizer

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update docs

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Reanme Service interface to Transformer

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Use msg instead of rawmsg

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove rawMsg from Aedes code

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix VerneMQ files

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove RawMessage code

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix missing subtopic return

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove remaining RawMessage reference

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix formatting

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix readers and writers tests

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Rename SenML transformer variables

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix readers and writers tests constants

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>
2019-11-05 11:57:16 +01:00

80 lines
2.0 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package mongodb
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"github.com/mainflux/mainflux/transformers/senml"
"github.com/mainflux/mainflux/writers"
)
const collectionName string = "mainflux"
var _ writers.MessageRepository = (*mongoRepo)(nil)
type mongoRepo struct {
db *mongo.Database
}
// Message struct is used as a MongoDB representation of Mainflux message.
type message struct {
Channel string `bson:"channel,omitempty"`
Subtopic string `bson:"subtopic,omitempty"`
Publisher string `bson:"publisher,omitempty"`
Protocol string `bson:"protocol,omitempty"`
Name string `bson:"name,omitempty"`
Unit string `bson:"unit,omitempty"`
Value *float64 `bson:"value,omitempty"`
StringValue *string `bson:"stringValue,omitempty"`
BoolValue *bool `bson:"boolValue,omitempty"`
DataValue *string `bson:"dataValue,omitempty"`
Sum *float64 `bson:"sum,omitempty"`
Time float64 `bson:"time,omitempty"`
UpdateTime float64 `bson:"updateTime,omitempty"`
Link string `bson:"link,omitempty"`
}
// New returns new MongoDB writer.
func New(db *mongo.Database) writers.MessageRepository {
return &mongoRepo{db}
}
func (repo *mongoRepo) Save(messages ...senml.Message) error {
coll := repo.db.Collection(collectionName)
var msgs []interface{}
for _, msg := range messages {
m := message{
Channel: msg.Channel,
Subtopic: msg.Subtopic,
Publisher: msg.Publisher,
Protocol: msg.Protocol,
Name: msg.Name,
Unit: msg.Unit,
Time: msg.Time,
UpdateTime: msg.UpdateTime,
Link: msg.Link,
}
switch {
case msg.Value != nil:
m.Value = msg.Value
case msg.StringValue != nil:
m.StringValue = msg.StringValue
case msg.DataValue != nil:
m.DataValue = msg.DataValue
case msg.BoolValue != nil:
m.BoolValue = msg.BoolValue
}
m.Sum = msg.Sum
msgs = append(msgs, m)
}
_, err := coll.InsertMany(context.Background(), msgs)
return err
}