From 4e15f1b36b1b369221f0d22fa4b249976193b742 Mon Sep 17 00:00:00 2001 From: Andre Sterba <andre.sterba@stud.h-da.de> Date: Fri, 22 Apr 2022 09:05:43 +0000 Subject: [PATCH] Fix get by name for devices See merge request danet/gosdn!286 Co-authored-by: Malte Bauch <malte.bauch@extern.h-da.de> --- controller/nucleus/databaseDeviceStore.go | 71 ++++++++++++++++++----- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go index cb6af812e..fecf9f09e 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. -- GitLab