From 02a97b976278529ad9fbca7e40ac9f6c4a2ae9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Z=C3=BCrcher?= Date: Wed, 19 Nov 2025 12:02:10 +0100 Subject: [PATCH] add new functions and create folder of db path if nonexisting --- dbHandler.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/dbHandler.go b/dbHandler.go index 2527608..3f71df8 100644 --- a/dbHandler.go +++ b/dbHandler.go @@ -3,6 +3,7 @@ package dbHandler import ( "errors" "fmt" + "os" "path/filepath" "reflect" "strings" @@ -57,12 +58,30 @@ func NewDBHandler(name, path string, logger *logging.Logger) (dH *DBHandler, err if filepath.Ext(name) == "" { name += ".db" } + + if path != "" { + if _, err := os.Stat(path); err != nil { + if err := os.MkdirAll(path, 0666); err != err { + return nil, err + } + } + } + dbPath := filepath.Join(path, name) logger.Debug("NewDBHandler", "open database "+dbPath) dH.db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) return } +// close DB +func (dH *DBHandler) Close() error { + sqlDB, err := dH.db.DB() + if err != nil { + return err + } + return sqlDB.Close() +} + // addNewTable // // Description: @@ -302,3 +321,24 @@ func (dH *DBHandler) Exists(model any, key string, value any, likeSearch bool) ( } return tx.RowsAffected > 0 } + +func (dH *DBHandler) GetByIdWithRelation(model any, relation string, id uint) error { + if id == 0 { + return dH.db.Preload(relation).Find(model).Error + } + + // Load member AND its events + err := dH.db.Preload(relation).First(model, id).Error + + if errors.Is(err, gorm.ErrRecordNotFound) { + return fmt.Errorf("no record found for id: %v", id) + } else if err != nil { + return fmt.Errorf("query failed: %w", err) + } + return nil +} + +func (dH *DBHandler) AddRelation(model, relation any, relationName string) error { + return dH.db.Model(model).Association(relationName).Append(relation) + +}