From de11211de1d159da00cd18bdb4a2ca4df97c0509 Mon Sep 17 00:00:00 2001 From: Joel Schmid Date: Sun, 25 Apr 2021 00:31:27 +0200 Subject: [PATCH] optimized mongodb --- storage/inmemory-sensor-registry.go | 4 +-- storage/mongodb-storage.go | 42 ++++++++++++++--------------- storage/sensor-registry.go | 3 ++- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/storage/inmemory-sensor-registry.go b/storage/inmemory-sensor-registry.go index 543ff3f..f4978d8 100644 --- a/storage/inmemory-sensor-registry.go +++ b/storage/inmemory-sensor-registry.go @@ -48,9 +48,9 @@ func (registry *inmemorySensorRegistry) ResolveSensorById(sensorId uuid.UUID) (* return nil, errors.New("sensor does not exist") } -func (registry *inmemorySensorRegistry) ExistSensor(sensor *WeatherSensor) (bool, error) { +func (registry *inmemorySensorRegistry) ExistSensor(sensorId uuid.UUID) (bool, error) { for _, s := range registry.weatherSensors { - if s.Id == sensor.Id { + if s.Id == sensorId { return true, nil } } diff --git a/storage/mongodb-storage.go b/storage/mongodb-storage.go index 4ee8b8c..b5c76f7 100644 --- a/storage/mongodb-storage.go +++ b/storage/mongodb-storage.go @@ -72,45 +72,45 @@ func (registry *mongodbSensorRegistry) RegisterSensorByName(name string) (*Weath } func (registry *mongodbSensorRegistry) ExistSensorName(name string) (bool, error) { - sensors, err := registry.GetSensors() + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cursor, err := registry.sensorCollection.Find(ctx, bson.M{"name": name}) if err != nil { log.Fatal(err) return false, err } - for _, s := range sensors { - if s.Name == name { - return true, nil - } - } - return false, nil + + return cursor.Next(ctx), nil } func (registry *mongodbSensorRegistry) ResolveSensorById(sensorId uuid.UUID) (*WeatherSensor, error) { - sensors, err := registry.GetSensors() + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cursor, err := registry.sensorCollection.Find(ctx, bson.M{"id": sensorId}) if err != nil { log.Fatal(err) return nil, err } - for _, s := range sensors { - if s.Id == sensorId { - return s, nil - } + + if !cursor.Next(ctx) { + return nil, errors.New("sensor does not exist") } - return nil, errors.New("sensor does not exist") + + var sensor *WeatherSensor + if err = cursor.Decode(&sensor); err != nil { + log.Fatal(err) + return nil, err + } + return sensor, nil } -func (registry *mongodbSensorRegistry) ExistSensor(sensor *WeatherSensor) (bool, error) { - sensors, err := registry.GetSensors() +func (registry *mongodbSensorRegistry) ExistSensor(sensorId uuid.UUID) (bool, error) { + ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) + cursor, err := registry.sensorCollection.Find(ctx, bson.M{"id": sensorId}) if err != nil { log.Fatal(err) return false, err } - for _, s := range sensors { - if s.Id == sensor.Id { - return true, nil - } - } - return false, nil + + return cursor.Next(ctx), nil } func (registry *mongodbSensorRegistry) GetSensors() ([]*WeatherSensor, error) { diff --git a/storage/sensor-registry.go b/storage/sensor-registry.go index c6fd7d5..83935ac 100644 --- a/storage/sensor-registry.go +++ b/storage/sensor-registry.go @@ -4,7 +4,8 @@ import "github.com/google/uuid" type SensorRegistry interface { RegisterSensorByName(string) (*WeatherSensor, error) - ExistSensor(*WeatherSensor) (bool, error) + ExistSensor(sensorId uuid.UUID) (bool, error) + ExistSensorName(name string) (bool, error) ResolveSensorById(uuid.UUID) (*WeatherSensor, error) DeleteSensor(uuid.UUID) error UpdateSensor(*WeatherSensor) error