feat: save devices at database

This commit is contained in:
Leandro Antônio Farias Machado 2023-04-20 11:37:20 -03:00
parent 0ff00b9ca1
commit 7c40982a00
4 changed files with 37 additions and 5 deletions

View File

@ -10,6 +10,7 @@ require (
require (
github.com/golang/snappy v0.0.1 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
github.com/pkg/errors v0.9.1 // indirect

View File

@ -9,6 +9,8 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=

View File

@ -1,6 +1,14 @@
package db
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
type Device struct {
SN string
Model string
Customer string
Vendor string
@ -8,12 +16,33 @@ type Device struct {
}
func (d *Database) CreateDevice(device Device) error {
_, err := d.devices.InsertOne(d.ctx, device, nil)
var result bson.M
opts := options.FindOneAndReplace().SetUpsert(true)
err := d.devices.FindOneAndReplace(d.ctx, bson.D{{"sn", device.SN}}, device, opts).Decode(&result)
if err != nil {
if err == mongo.ErrNoDocuments {
log.Printf("New device %s added to database", device.SN)
return nil
}
log.Fatal(err)
}
log.Printf("Device %s already existed, and got replaced for new info", device.SN)
return err
}
func (d *Database) RetrieveDevice() {
func (d *Database) RetrieveDevices() ([]Device, error) {
var results []Device
//TODO: filter devices by user ownership
cursor, err := d.devices.Find(d.ctx, bson.D{}, nil)
if err != nil {
log.Println(err)
return nil, err
}
if err = cursor.All(d.ctx, &results); err != nil {
log.Println(err)
return nil, err
}
return results, nil
}
func (d *Database) DeleteDevice() {

View File

@ -238,6 +238,7 @@ func (m *Mqtt) handleNewDevice(deviceMac string) {
"Device.DeviceInfo.Manufacturer",
"Device.DeviceInfo.ModelName",
"Device.DeviceInfo.SoftwareVersion",
"Device.DeviceInfo.SerialNumber",
},
MaxDepth: 1,
},
@ -285,11 +286,10 @@ func (m *Mqtt) handleDevicesResponse(p []byte) {
device.Vendor = msg.ReqPathResults[0].ResolvedPathResults[0].ResultParams["Manufacturer"]
device.Model = msg.ReqPathResults[1].ResolvedPathResults[0].ResultParams["ModelName"]
device.Version = msg.ReqPathResults[2].ResolvedPathResults[0].ResultParams["SoftwareVersion"]
device.SN = msg.ReqPathResults[3].ResolvedPathResults[0].ResultParams["SerialNumber"]
err = m.DB.CreateDevice(device)
if err != nil {
log.Fatal(err)
}
log.Printf("New device saved at database")
}