From 4f803b47a7b509b04c6ebe2b315bbe81feefa11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Z=C3=BCrcher?= Date: Wed, 19 Nov 2025 22:49:22 +0100 Subject: [PATCH] add relation to delete --- dbHandler.go | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/dbHandler.go b/dbHandler.go index 4779d28..8874fbc 100644 --- a/dbHandler.go +++ b/dbHandler.go @@ -251,6 +251,7 @@ func (dH *DBHandler) UpdateValuesByKey(model any, relation string, key string, v if err := dH.GetByKey(lookUpModel, "", key, value, false); err != nil { return err } + query := dH.db if relation != "" { @@ -259,7 +260,7 @@ func (dH *DBHandler) UpdateValuesByKey(model any, relation string, key string, v return query.Model(lookUpModel).Updates(model).Error } -func (dH *DBHandler) DeleteById(model any, ids ...uint) error { +func (dH *DBHandler) DeleteById(model any, relation string, ids ...uint) error { if len(ids) == 0 { return fmt.Errorf("no IDs provided") } @@ -272,7 +273,13 @@ func (dH *DBHandler) DeleteById(model any, ids ...uint) error { dH.logger.Debug("deleteById", "delete ids "+fmt.Sprint(ids)) - if err := dH.db.Delete(model, ids).Error; err != nil { + query := dH.db + + if relation != "" { + query = query.Preload(relation) + } + + if err := query.Delete(model, ids).Error; err != nil { return fmt.Errorf("delete failed: %w", err) } return nil @@ -295,7 +302,7 @@ func (dH *DBHandler) DeleteById(model any, ids ...uint) error { // // Returns: // - error: Any deletion error. -func (dH *DBHandler) DeleteByKey(model any, key string, value any, LikeSearch bool) error { +func (dH *DBHandler) DeleteByKey(model any, relation string, key string, value any, LikeSearch bool) error { if LikeSearch { value = strings.ReplaceAll(fmt.Sprint(value), "*", "%") dH.logger.Debug("deleteByKey", "delete like key "+key+" value "+fmt.Sprint(value)) @@ -303,10 +310,17 @@ func (dH *DBHandler) DeleteByKey(model any, key string, value any, LikeSearch bo } dH.logger.Debug("deleteByKey", "delete equal key "+key+" value "+fmt.Sprint(value)) - return dH.db.Where(key+" = ?", value).Delete(model).Error + + query := dH.db + + if relation != "" { + query = query.Preload(relation) + } + + return query.Where(key+" = ?", value).Delete(model).Error } -func (dH *DBHandler) Exists(model any, key string, value any, likeSearch bool) (found bool) { +func (dH *DBHandler) Exists(model any, relation string, key string, value any, likeSearch bool) (found bool) { var query string var args any @@ -335,7 +349,12 @@ func (dH *DBHandler) Exists(model any, key string, value any, likeSearch bool) ( dH.logger.Debug("exists", "checking existence for key "+query+" value "+fmt.Sprint(args)) - tx := dH.db.Where(query, args).Find(model) + datababase := dH.db + if relation != "" { + datababase = datababase.Preload(relation) + } + + tx := datababase.Where(query, args).Find(model) if tx.Error != nil { dH.logger.Error("Exists", fmt.Sprintf("query failed: %v", tx.Error))