oktopus/backend/services/controller/internal/db/device.go

88 lines
1.7 KiB
Go

package db
import (
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type MTP int32
const (
UNDEFINED MTP = iota
MQTT
STOMP
WEBSOCKETS
)
type Device struct {
SN string
Model string
Customer string
Vendor string
Version string
ProductClass string
Status uint8
MTP []map[string]string
}
func (d *Database) CreateDevice(device Device) error {
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) 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) RetrieveDevice(sn string) (Device, error) {
var result Device
//TODO: filter devices by user ownership
err := d.devices.FindOne(d.ctx, bson.D{{"sn", sn}}, nil).Decode(&result)
if err != nil {
log.Println(err)
}
return result, err
}
func (d *Database) DeleteDevice() {
}
func (m MTP) String() string {
switch m {
case UNDEFINED:
return "unknown"
case MQTT:
return "mqtt"
case STOMP:
return "stomp"
case WEBSOCKETS:
return "websockets"
}
return "unknown"
}