diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go index cb6af812ef2c0050b98f3f8c2d74ccffb7a050f2..fecf9f09ee1ba433518a77d2628dddf8aaa2115c 100644 --- a/controller/nucleus/databaseDeviceStore.go +++ b/controller/nucleus/databaseDeviceStore.go @@ -36,6 +36,37 @@ func NewDatabaseDeviceStore(pndUUID uuid.UUID, sbiStore southbound.SbiStore) dev // Get takes a Device's UUID or name and returns the Device. func (s *DatabaseDeviceStore) Get(query store.Query) (device.Device, error) { var loadedDevice LoadedDevice + var err error + + if query.ID.String() != "" { + loadedDevice, err = s.getByID(query.ID) + if err != nil { + return nil, errors.ErrCouldNotFind{StoreName: deviceStoreName} + } + + device, err := s.createDeviceFromStore(loadedDevice) + if err != nil { + return nil, err + } + + return device, nil + } + + loadedDevice, err = s.getByName(query.Name) + if err != nil { + return nil, errors.ErrCouldNotFind{StoreName: deviceStoreName} + } + + device, err := s.createDeviceFromStore(loadedDevice) + if err != nil { + return nil, err + } + + return device, nil +} + +func (s *DatabaseDeviceStore) getByID(idOfDevice uuid.UUID) (LoadedDevice, error) { + var loadedDevice LoadedDevice client, ctx, cancel := database.GetMongoConnection() defer cancel() @@ -43,33 +74,41 @@ func (s *DatabaseDeviceStore) Get(query store.Query) (device.Device, error) { db := client.Database(database.DatabaseName) collection := db.Collection(s.storeName) - result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.ID}}) + result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfDevice.String()}}) if result == nil { - return nil, errors.ErrCouldNotFind{StoreName: deviceStoreName} + return loadedDevice, errors.ErrCouldNotFind{StoreName: deviceStoreName} } err := result.Decode(&loadedDevice) if err != nil { - db := client.Database(database.DatabaseName) - collection := db.Collection(s.storeName) - result := collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: query.Name}}) - if result == nil { - return nil, errors.ErrCouldNotFind{StoreName: deviceStoreName} - } + log.Printf("Failed marshalling %v", err) + return loadedDevice, errors.ErrCouldNotFind{StoreName: deviceStoreName} + } - err := result.Decode(&loadedDevice) - if err != nil { - log.Printf("Failed marshalling %v", err) - return nil, errors.ErrCouldNotFind{StoreName: deviceStoreName} - } + return loadedDevice, nil +} + +func (s *DatabaseDeviceStore) getByName(nameOfDevice string) (LoadedDevice, error) { + var loadedDevice LoadedDevice + + client, ctx, cancel := database.GetMongoConnection() + defer cancel() + defer client.Disconnect(ctx) + + db := client.Database(database.DatabaseName) + collection := db.Collection(s.storeName) + result := collection.FindOne(ctx, bson.D{primitive.E{Key: "name", Value: nameOfDevice}}) + if result == nil { + return loadedDevice, errors.ErrCouldNotFind{StoreName: deviceStoreName} } - device, err := s.createDeviceFromStore(loadedDevice) + err := result.Decode(&loadedDevice) if err != nil { - return nil, err + log.Printf("Failed marshalling %v", err) + return loadedDevice, errors.ErrCouldNotFind{StoreName: deviceStoreName} } - return device, nil + return loadedDevice, nil } // GetAll returns all stored devices.