From bbedf774e0638d937710ad81dc0c8c9714c3a585 Mon Sep 17 00:00:00 2001
From: Fabian Seidl <fabian.b.seidl@stud.h-da.de>
Date: Fri, 17 Jun 2022 06:32:13 +0000
Subject: [PATCH] Resolve "Some of the used errors do not provide useful
 information"

See merge request danet/gosdn!336
---
 controller/nucleus/databaseDeviceStore.go   | 12 +++++------
 controller/nucleus/databasePndStore.go      | 16 +++++++-------
 controller/nucleus/databaseSbiStore.go      | 16 +++++++-------
 controller/nucleus/deviceFilesystemStore.go |  4 ++--
 controller/nucleus/errors/errors.go         | 24 ++++++++++++++-------
 controller/nucleus/memorySbiStore.go        |  2 +-
 controller/nucleus/pndFilesystemStore.go    | 10 ++++-----
 controller/nucleus/pndStore.go              |  4 ----
 controller/nucleus/sbiFilesystemStore.go    |  2 +-
 controller/nucleus/sbiStore.go              |  4 ----
 controller/rbac/databaseRoleStore.go        | 12 +++++------
 controller/rbac/databaseUserStore.go        | 12 +++++------
 controller/rbac/roleFileSystemStore.go      | 16 +++++++-------
 controller/rbac/userFileSystemStore.go      |  4 ++--
 14 files changed, 69 insertions(+), 69 deletions(-)

diff --git a/controller/nucleus/databaseDeviceStore.go b/controller/nucleus/databaseDeviceStore.go
index 530bbec1e..4fe9af32e 100644
--- a/controller/nucleus/databaseDeviceStore.go
+++ b/controller/nucleus/databaseDeviceStore.go
@@ -65,7 +65,7 @@ func (s *DatabaseDeviceStore) getByID(idOfDevice uuid.UUID) (device.LoadedDevice
 	err := result.Decode(&loadedDevice)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedDevice, errors.ErrCouldNotMarshall{StoreName: s.storeName}
+		return loadedDevice, errors.ErrCouldNotMarshall{Identifier: idOfDevice, Type: loadedDevice, Err: err}
 	}
 
 	return loadedDevice, nil
@@ -88,7 +88,7 @@ func (s *DatabaseDeviceStore) getByName(nameOfDevice string) (device.LoadedDevic
 	err := result.Decode(&loadedDevice)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedDevice, errors.ErrCouldNotMarshall{StoreName: s.storeName}
+		return loadedDevice, errors.ErrCouldNotMarshall{Identifier: nameOfDevice, Type: loadedDevice, Err: err}
 	}
 
 	return loadedDevice, nil
@@ -114,7 +114,7 @@ func (s *DatabaseDeviceStore) GetAll() ([]device.LoadedDevice, error) {
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName}
+		return nil, errors.ErrCouldNotMarshall{Type: loadedDevices, Err: err}
 	}
 
 	return loadedDevices, nil
@@ -131,7 +131,7 @@ func (s *DatabaseDeviceStore) Add(deviceToAdd device.Device) error {
 		InsertOne(ctx, deviceToAdd)
 	if err != nil {
 		log.Printf("Could not create Device: %v", err)
-		return errors.ErrCouldNotCreate{StoreName: pndStoreName}
+		return errors.ErrCouldNotCreate{Identifier: deviceToAdd.ID(), Type: deviceToAdd, Err: err}
 	}
 
 	return nil
@@ -162,7 +162,7 @@ func (s *DatabaseDeviceStore) Update(deviceToUpdate device.Device) error {
 	if err != nil {
 		log.Printf("Could not update Device: %v", err)
 
-		return errors.ErrCouldNotUpdate{StoreName: pndStoreName}
+		return errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
 	}
 
 	return nil
@@ -178,7 +178,7 @@ func (s *DatabaseDeviceStore) Delete(deviceToDelete device.Device) error {
 	collection := db.Collection(s.storeName)
 	_, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: deviceToDelete.ID().String()}})
 	if err != nil {
-		return err
+		return errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
 	}
 
 	return nil
diff --git a/controller/nucleus/databasePndStore.go b/controller/nucleus/databasePndStore.go
index f39ef1138..62d9b29e5 100644
--- a/controller/nucleus/databasePndStore.go
+++ b/controller/nucleus/databasePndStore.go
@@ -44,7 +44,7 @@ func (s *DatabasePndStore) Get(query store.Query) (networkdomain.NetworkDomain,
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName}
+		return nil, errors.ErrCouldNotMarshall{Identifier: query.ID, Type: loadedPND, Err: err}
 	}
 
 	csbiClient, err := s.getCsbiClient()
@@ -87,7 +87,7 @@ func (s *DatabasePndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: pndStoreName}
+		return nil, errors.ErrCouldNotMarshall{Type: loadedPnds, Err: err}
 	}
 
 	csbiClient, err := s.getCsbiClient()
@@ -114,16 +114,16 @@ func (s *DatabasePndStore) GetAll() ([]networkdomain.NetworkDomain, error) {
 }
 
 // Add adds a pnd to the pnd store.
-func (s *DatabasePndStore) Add(pnd networkdomain.NetworkDomain) error {
+func (s *DatabasePndStore) Add(pndToAdd networkdomain.NetworkDomain) error {
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
 	defer client.Disconnect(ctx)
 
 	_, err := client.Database(database.DatabaseName).
 		Collection(s.pndStoreName).
-		InsertOne(ctx, pnd)
+		InsertOne(ctx, pndToAdd)
 	if err != nil {
-		return errors.ErrCouldNotCreate{StoreName: pndStoreName}
+		return errors.ErrCouldNotCreate{Identifier: pndToAdd.ID(), Type: pndToAdd, Err: err}
 	}
 
 	return nil
@@ -131,16 +131,16 @@ func (s *DatabasePndStore) Add(pnd networkdomain.NetworkDomain) error {
 
 // Delete deletes a pnd.
 // It also deletes all assosicated devices and sbis.
-func (s *DatabasePndStore) Delete(pnd networkdomain.NetworkDomain) error {
+func (s *DatabasePndStore) Delete(pndToDelete networkdomain.NetworkDomain) error {
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
 	defer client.Disconnect(ctx)
 
 	db := client.Database(database.DatabaseName)
 	collection := db.Collection(s.pndStoreName)
-	_, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: pnd.ID().String()}})
+	_, err := collection.DeleteOne(ctx, bson.D{primitive.E{Key: pndToDelete.ID().String()}})
 	if err != nil {
-		return err
+		return errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
 	}
 
 	// TODO: Delete all assosicated devices + SBIs
diff --git a/controller/nucleus/databaseSbiStore.go b/controller/nucleus/databaseSbiStore.go
index 43a1bca99..b472b834e 100644
--- a/controller/nucleus/databaseSbiStore.go
+++ b/controller/nucleus/databaseSbiStore.go
@@ -18,36 +18,36 @@ type DatabaseSbiStore struct {
 }
 
 // Add adds a SBI.
-func (s *DatabaseSbiStore) Add(item southbound.SouthboundInterface) error {
+func (s *DatabaseSbiStore) Add(sbiToAdd southbound.SouthboundInterface) error {
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
 	defer client.Disconnect(ctx)
 
 	_, err := client.Database(database.DatabaseName).
 		Collection(s.sbiStoreName).
-		InsertOne(ctx, item)
+		InsertOne(ctx, sbiToAdd)
 	if err != nil {
 		if mongo.IsDuplicateKeyError(err) {
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{StoreName: sbiStoreName}
+		return errors.ErrCouldNotCreate{Identifier: sbiToAdd.ID(), Type: sbiToAdd, Err: err}
 	}
 
 	return nil
 }
 
 // Delete deletes an SBI.
-func (s *DatabaseSbiStore) Delete(item southbound.SouthboundInterface) error {
+func (s *DatabaseSbiStore) Delete(sbiToDelete southbound.SouthboundInterface) error {
 	client, ctx, cancel := database.GetMongoConnection()
 	defer cancel()
 	defer client.Disconnect(ctx)
 
 	_, err := client.Database(database.DatabaseName).
 		Collection(s.sbiStoreName).
-		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: item.ID().String()}})
+		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: sbiToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotDelete{StoreName: sbiStoreName}
+		return errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
 	}
 
 	return nil
@@ -75,7 +75,7 @@ func (s *DatabaseSbiStore) Get(query store.Query) (southbound.LoadedSbi, error)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return loadedSbi, errors.ErrCouldNotMarshall{StoreName: sbiStoreName}
+		return loadedSbi, errors.ErrCouldNotMarshall{Identifier: query.ID, Type: loadedSbi, Err: err}
 	}
 
 	return loadedSbi, nil
@@ -101,7 +101,7 @@ func (s *DatabaseSbiStore) GetAll() ([]southbound.LoadedSbi, error) {
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: sbiStoreName}
+		return nil, errors.ErrCouldNotMarshall{Type: loadedSbis, Err: err}
 	}
 
 	return loadedSbis, nil
diff --git a/controller/nucleus/deviceFilesystemStore.go b/controller/nucleus/deviceFilesystemStore.go
index 76f50dd2e..503cef114 100644
--- a/controller/nucleus/deviceFilesystemStore.go
+++ b/controller/nucleus/deviceFilesystemStore.go
@@ -142,7 +142,7 @@ func (s *FilesystemDeviceStore) Update(deviceToUpdate device.Device) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: deviceToUpdate.ID().String(), Name: deviceToUpdate.Name()}
+	return &errors.ErrCouldNotUpdate{Identifier: deviceToUpdate.ID(), Type: deviceToUpdate, Err: err}
 }
 
 // Delete deletes a device from the device store.
@@ -170,5 +170,5 @@ func (s *FilesystemDeviceStore) Delete(deviceToDelete device.Device) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: deviceToDelete.ID, Name: deviceToDelete.Name()}
+	return &errors.ErrCouldNotDelete{Identifier: deviceToDelete.ID(), Type: deviceToDelete, Err: err}
 }
diff --git a/controller/nucleus/errors/errors.go b/controller/nucleus/errors/errors.go
index eac05eb44..db262595f 100644
--- a/controller/nucleus/errors/errors.go
+++ b/controller/nucleus/errors/errors.go
@@ -162,21 +162,25 @@ func (e ErrTypeNotSupported) Error() string {
 // ErrCouldNotMarshall implements Error interface and is called if a
 // database respone can not be parsed.
 type ErrCouldNotMarshall struct {
-	StoreName string
+	Identifier any
+	Type       any
+	Err        error
 }
 
 func (e ErrCouldNotMarshall) Error() string {
-	return fmt.Sprintf("could not marshall %s", e.StoreName)
+	return fmt.Sprintf("could not marshall Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
 // ErrCouldNotUpdate implements the Error interface and is called if a
 // stored item can not be updated.
 type ErrCouldNotUpdate struct {
-	StoreName string
+	Identifier any
+	Type       any
+	Err        error
 }
 
 func (e ErrCouldNotUpdate) Error() string {
-	return fmt.Sprintf("could not update %s", e.StoreName)
+	return fmt.Sprintf("could not update Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
 // ErrCouldNotFind implements the Error interface and is called if a
@@ -193,21 +197,25 @@ func (e ErrCouldNotFind) Error() string {
 // ErrCouldNotCreate implements the Error interface and is called if a
 // stored item can not be found.
 type ErrCouldNotCreate struct {
-	StoreName string
+	Identifier any
+	Type       any
+	Err        error
 }
 
 func (e ErrCouldNotCreate) Error() string {
-	return fmt.Sprintf("could not create %s", e.StoreName)
+	return fmt.Sprintf("could not create Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
 // ErrCouldNotDelete implements the Error interface and is called if a
 // stored item can not be deleted.
 type ErrCouldNotDelete struct {
-	StoreName string
+	Identifier any
+	Type       any
+	Err        error
 }
 
 func (e ErrCouldNotDelete) Error() string {
-	return fmt.Sprintf("could not delete %s", e.StoreName)
+	return fmt.Sprintf("could not delete Identifier: %v of Type: %T, Internal error: %v", e.Identifier, e.Type, e.Err)
 }
 
 // ErrNoNewChanges implements the Error interface and is called if a the
diff --git a/controller/nucleus/memorySbiStore.go b/controller/nucleus/memorySbiStore.go
index d1f69e12a..82a276730 100644
--- a/controller/nucleus/memorySbiStore.go
+++ b/controller/nucleus/memorySbiStore.go
@@ -85,7 +85,7 @@ func (t *MemorySbiStore) Get(query store.Query) (southbound.LoadedSbi, error) {
 		// Second search for name
 		id, ok := t.nameLookupTable[query.Name]
 		if !ok {
-			return item, errors.ErrCouldNotDelete{StoreName: sbiStoreName}
+			return item, errors.ErrCouldNotFind{ID: query.ID, Name: query.Name}
 		}
 
 		item, ok := t.Store[id]
diff --git a/controller/nucleus/pndFilesystemStore.go b/controller/nucleus/pndFilesystemStore.go
index 81d243b7b..867d65439 100644
--- a/controller/nucleus/pndFilesystemStore.go
+++ b/controller/nucleus/pndFilesystemStore.go
@@ -87,7 +87,7 @@ func (t *FilesystemPndStore) writeAllPndsToFile(pnds []networkdomain.NetworkDoma
 }
 
 // Add a pnd to the store.
-func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error {
+func (t *FilesystemPndStore) Add(pndToAdd networkdomain.NetworkDomain) error {
 	t.fileMutex.Lock()
 	defer t.fileMutex.Unlock()
 
@@ -96,7 +96,7 @@ func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error {
 		return err
 	}
 
-	pnds = append(pnds, item)
+	pnds = append(pnds, pndToAdd)
 
 	err = t.writeAllPndsToFile(pnds)
 	if err != nil {
@@ -107,7 +107,7 @@ func (t *FilesystemPndStore) Add(item networkdomain.NetworkDomain) error {
 }
 
 // Delete deletes a pnd from the store.
-func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error {
+func (t *FilesystemPndStore) Delete(pndToDelete networkdomain.NetworkDomain) error {
 	t.fileMutex.Lock()
 	defer t.fileMutex.Unlock()
 
@@ -117,7 +117,7 @@ func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error {
 	}
 
 	for i, pnd := range pnds {
-		if pnd.ID() == item.ID() {
+		if pnd.ID() == pndToDelete.ID() {
 			//remove item from slice
 			pnds[i] = pnds[len(pnds)-1]
 			pnds = pnds[:len(pnds)-1]
@@ -131,7 +131,7 @@ func (t *FilesystemPndStore) Delete(item networkdomain.NetworkDomain) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: item.ID, Name: item.GetName()}
+	return &errors.ErrCouldNotDelete{Identifier: pndToDelete.ID(), Type: pndToDelete, Err: err}
 }
 
 // Get provides a the query interface to find a stored pnd.
diff --git a/controller/nucleus/pndStore.go b/controller/nucleus/pndStore.go
index 876e03742..0beb13b4c 100644
--- a/controller/nucleus/pndStore.go
+++ b/controller/nucleus/pndStore.go
@@ -8,10 +8,6 @@ import (
 	log "github.com/sirupsen/logrus"
 )
 
-const (
-	pndStoreName = "pnd"
-)
-
 // LoadedPnd represents a Principal Network Domain that was loaeded by using
 // the Load() method of the PndStore.
 type LoadedPnd struct {
diff --git a/controller/nucleus/sbiFilesystemStore.go b/controller/nucleus/sbiFilesystemStore.go
index 9859549f6..f4558ce6f 100644
--- a/controller/nucleus/sbiFilesystemStore.go
+++ b/controller/nucleus/sbiFilesystemStore.go
@@ -110,7 +110,7 @@ func (s *FilesystemSbiStore) Delete(sbiToDelete southbound.SouthboundInterface)
 			return nil
 		}
 	}
-	return &errors.ErrCouldNotFind{ID: sbiToDelete.ID, Name: sbiToDelete.Name()}
+	return &errors.ErrCouldNotDelete{Identifier: sbiToDelete.ID(), Type: sbiToDelete, Err: err}
 }
 
 // Get takes a SouthboundInterface's UUID or name and returns the SouthboundInterface. If the requested
diff --git a/controller/nucleus/sbiStore.go b/controller/nucleus/sbiStore.go
index fa992e4c1..803dbf043 100644
--- a/controller/nucleus/sbiStore.go
+++ b/controller/nucleus/sbiStore.go
@@ -9,10 +9,6 @@ import (
 	"github.com/google/uuid"
 )
 
-const (
-	sbiStoreName = "sbi"
-)
-
 // SbiStore is used to store SouthboundInterfaces
 type SbiStore struct {
 	sbiStoreName string
diff --git a/controller/rbac/databaseRoleStore.go b/controller/rbac/databaseRoleStore.go
index b97da6d9a..78044d11e 100644
--- a/controller/rbac/databaseRoleStore.go
+++ b/controller/rbac/databaseRoleStore.go
@@ -32,7 +32,7 @@ func (s *DatabaseRoleStore) Add(roleToAdd rbac.Role) error {
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{StoreName: s.roleStoreName}
+		return errors.ErrCouldNotCreate{Identifier: roleToAdd.ID(), Type: roleToAdd, Err: err}
 	}
 
 	return nil
@@ -48,7 +48,7 @@ func (s *DatabaseRoleStore) Delete(roleToDelete rbac.Role) error {
 		Collection(s.roleStoreName).
 		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: roleToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotFind{ID: roleToDelete.ID(), Name: roleToDelete.Name()}
+		return errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
 	}
 
 	return nil
@@ -93,7 +93,7 @@ func (s *DatabaseRoleStore) getByID(idOfRole uuid.UUID) (rbac.LoadedRole, error)
 	err := result.Decode(&loadedRole)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedRole, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName}
+		return loadedRole, errors.ErrCouldNotMarshall{Identifier: idOfRole, Type: loadedRole, Err: err}
 	}
 
 	return loadedRole, nil
@@ -116,7 +116,7 @@ func (s *DatabaseRoleStore) getByName(nameOfRole string) (rbac.LoadedRole, error
 	err := result.Decode(&loadedRole)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedRole, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName}
+		return loadedRole, errors.ErrCouldNotMarshall{Identifier: nameOfRole, Type: loadedRole, Err: err}
 	}
 
 	return loadedRole, nil
@@ -142,7 +142,7 @@ func (s *DatabaseRoleStore) GetAll() ([]rbac.LoadedRole, error) {
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: s.roleStoreName}
+		return nil, errors.ErrCouldNotMarshall{Type: loadedRoles, Err: err}
 	}
 	return loadedRoles, nil
 }
@@ -172,7 +172,7 @@ func (s *DatabaseRoleStore) Update(roleToUpdate rbac.Role) error {
 	if err != nil {
 		log.Printf("Could not update Role: %v", err)
 
-		return errors.ErrCouldNotUpdate{StoreName: s.roleStoreName}
+		return errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
 	}
 
 	return nil
diff --git a/controller/rbac/databaseUserStore.go b/controller/rbac/databaseUserStore.go
index a300c96ed..0d2cd0693 100644
--- a/controller/rbac/databaseUserStore.go
+++ b/controller/rbac/databaseUserStore.go
@@ -32,7 +32,7 @@ func (s *DatabaseUserStore) Add(userToAdd rbac.User) error {
 			return nil
 		}
 
-		return errors.ErrCouldNotCreate{StoreName: s.userStoreName}
+		return errors.ErrCouldNotCreate{Identifier: userToAdd.ID(), Type: userToAdd, Err: err}
 	}
 
 	return nil
@@ -48,7 +48,7 @@ func (s *DatabaseUserStore) Delete(userToDelete rbac.User) error {
 		Collection(s.userStoreName).
 		DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: userToDelete.ID().String()}})
 	if err != nil {
-		return errors.ErrCouldNotFind{ID: userToDelete.ID(), Name: userToDelete.Name()}
+		return errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
 	}
 
 	return nil
@@ -93,7 +93,7 @@ func (s *DatabaseUserStore) getByID(idOfUser uuid.UUID) (rbac.LoadedUser, error)
 	err := result.Decode(&loadedUser)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedUser, errors.ErrCouldNotMarshall{StoreName: s.userStoreName}
+		return loadedUser, errors.ErrCouldNotMarshall{Identifier: idOfUser, Type: loadedUser, Err: err}
 	}
 
 	return loadedUser, nil
@@ -116,7 +116,7 @@ func (s *DatabaseUserStore) getByName(nameOfUser string) (rbac.LoadedUser, error
 	err := result.Decode(&loadedUser)
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
-		return loadedUser, errors.ErrCouldNotMarshall{StoreName: s.userStoreName}
+		return loadedUser, errors.ErrCouldNotMarshall{Identifier: nameOfUser, Type: loadedUser, Err: err}
 	}
 
 	return loadedUser, nil
@@ -142,7 +142,7 @@ func (s *DatabaseUserStore) GetAll() ([]rbac.LoadedUser, error) {
 	if err != nil {
 		log.Printf("Failed marshalling %v", err)
 
-		return nil, errors.ErrCouldNotMarshall{StoreName: s.userStoreName}
+		return nil, errors.ErrCouldNotMarshall{Type: loadedUsers, Err: err}
 	}
 	return loadedUsers, nil
 }
@@ -172,7 +172,7 @@ func (s *DatabaseUserStore) Update(userToUpdate rbac.User) error {
 	if err != nil {
 		log.Printf("Could not update User: %v", err)
 
-		return errors.ErrCouldNotUpdate{StoreName: s.userStoreName}
+		return errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
 	}
 
 	return nil
diff --git a/controller/rbac/roleFileSystemStore.go b/controller/rbac/roleFileSystemStore.go
index 3c4fd0c26..bcf381396 100644
--- a/controller/rbac/roleFileSystemStore.go
+++ b/controller/rbac/roleFileSystemStore.go
@@ -40,8 +40,8 @@ func (s *FileSystemRoleStore) readAllRolesFromFile() ([]rbac.LoadedRole, error)
 	return loadedRoles, nil
 }
 
-func (s *FileSystemRoleStore) writeAllRolesToFile(Roles []rbac.LoadedRole) error {
-	serializedData, err := json.Marshal(Roles)
+func (s *FileSystemRoleStore) writeAllRolesToFile(roles []rbac.LoadedRole) error {
+	serializedData, err := json.Marshal(roles)
 	if err != nil {
 		return err
 	}
@@ -55,7 +55,7 @@ func (s *FileSystemRoleStore) writeAllRolesToFile(Roles []rbac.LoadedRole) error
 }
 
 // Add adds a Role to the Role store
-func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error {
+func (s *FileSystemRoleStore) Add(roleToAdd rbac.Role) error {
 	s.fileMutex.Lock()
 	defer s.fileMutex.Unlock()
 
@@ -65,7 +65,7 @@ func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error {
 	}
 
 	var loadedRole rbac.LoadedRole
-	loadedRole, err = store.TransformObjectToLoadedObject[rbac.Role, rbac.LoadedRole](RoleToAdd)
+	loadedRole, err = store.TransformObjectToLoadedObject[rbac.Role, rbac.LoadedRole](roleToAdd)
 	if err != nil {
 		return err
 	}
@@ -81,7 +81,7 @@ func (s *FileSystemRoleStore) Add(RoleToAdd rbac.Role) error {
 }
 
 //Delete deletes a Role from the Role store
-func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error {
+func (s *FileSystemRoleStore) Delete(roleToDelete rbac.Role) error {
 	s.fileMutex.Lock()
 	defer s.fileMutex.Unlock()
 
@@ -91,7 +91,7 @@ func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error {
 	}
 
 	for i, role := range roles {
-		if role.ID == RoleToDelete.ID().String() {
+		if role.ID == roleToDelete.ID().String() {
 			//remove item from slice
 			roles[i] = roles[len(roles)-1]
 			roles = roles[:len(roles)-1]
@@ -105,7 +105,7 @@ func (s *FileSystemRoleStore) Delete(RoleToDelete rbac.Role) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: RoleToDelete.ID(), Name: RoleToDelete.Name()}
+	return &errors.ErrCouldNotDelete{Identifier: roleToDelete.ID(), Type: roleToDelete, Err: err}
 }
 
 //Get takes a Roles ID and return the Role if found
@@ -162,5 +162,5 @@ func (s *FileSystemRoleStore) Update(roleToUpdate rbac.Role) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: roleToUpdate.ID(), Name: roleToUpdate.Name()}
+	return &errors.ErrCouldNotUpdate{Identifier: roleToUpdate.ID(), Type: roleToUpdate, Err: err}
 }
diff --git a/controller/rbac/userFileSystemStore.go b/controller/rbac/userFileSystemStore.go
index f0547a6b2..146ab0c5f 100644
--- a/controller/rbac/userFileSystemStore.go
+++ b/controller/rbac/userFileSystemStore.go
@@ -105,7 +105,7 @@ func (s *FileSystemUserStore) Delete(userToDelete rbac.User) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: userToDelete.ID(), Name: userToDelete.Name()}
+	return &errors.ErrCouldNotDelete{Identifier: userToDelete.ID(), Type: userToDelete, Err: err}
 }
 
 //Get takes a Users ID and return the User if found
@@ -162,5 +162,5 @@ func (s *FileSystemUserStore) Update(userToUpdate rbac.User) error {
 		}
 	}
 
-	return &errors.ErrCouldNotFind{ID: userToUpdate.ID(), Name: userToUpdate.Name()}
+	return &errors.ErrCouldNotUpdate{Identifier: userToUpdate.ID(), Type: userToUpdate, Err: err}
 }
-- 
GitLab