gitlab.nesad.fit.vutbr.cz/blended/libblended@v0.0.0-20221202124402-2bee159339df/catalog/database.go (about) 1 package catalog 2 3 import ( 4 "github.com/jinzhu/gorm" 5 _ "github.com/jinzhu/gorm/dialects/postgres" 6 _ "github.com/jinzhu/gorm/dialects/sqlite" 7 "gitlab.nesad.fit.vutbr.cz/blended/libblended/catalog/models" 8 // _ "github.com/jinzhu/gorm/dialects/mysql" 9 // _ "github.com/jinzhu/gorm/dialects/mssql" 10 ) 11 12 type Database struct { 13 dialect string 14 connectionString string 15 } 16 17 func NewPostgresDatabaseClient(host string, port string, user string, dbName string, password string) (*Database, error) { 18 c := new(Database) 19 c.dialect = "postgres" 20 c.connectionString = "host=" + host + " port=" + port + " user=" + user + " dbname=" + dbName + " password=" + password + " sslmode=disable" 21 22 err := c.Init() 23 if err != nil { 24 return nil, err 25 } 26 27 return c, nil 28 } 29 30 func NewSQLiteDatabaseClient(path string) (*Database, error) { 31 c := new(Database) 32 c.dialect = "sqlite3" 33 c.connectionString = path 34 35 err := c.Init() 36 if err != nil { 37 return nil, err 38 } 39 40 return c, nil 41 } 42 43 func (c *Database) Connect() (*gorm.DB, error) { 44 db, err := gorm.Open(c.dialect, c.connectionString) 45 if err != nil { 46 return nil, err 47 } 48 49 return db, nil 50 } 51 52 func (c *Database) Init() error { 53 db, err := c.Connect() 54 if err != nil { 55 return err 56 } 57 58 defer db.Close() 59 60 // Automatically migrate schema, to keep our schema update 61 return db.AutoMigrate(&models.Resource{}).Error 62 } 63 64 func (c *Database) Create(entity models.IDBEntity) error { 65 db, err := c.Connect() 66 if err != nil { 67 return err 68 } 69 70 defer db.Close() 71 return db.Create(entity).Error 72 } 73 74 func (c *Database) Update(entity models.IDBEntity) error { 75 db, err := c.Connect() 76 if err != nil { 77 return err 78 } 79 80 defer db.Close() 81 return db.Save(entity).Error 82 } 83 84 func (c *Database) Delete(entity models.IDBEntity) error { 85 db, err := c.Connect() 86 if err != nil { 87 return err 88 } 89 90 defer db.Close() 91 return db.Unscoped().Delete(entity).Error 92 } 93 94 func (c *Database) Query(queryFunction func(db *gorm.DB) *gorm.DB) (interface{}, error) { 95 db, err := c.Connect() 96 97 if err != nil { 98 return nil, err 99 } 100 101 defer db.Close() 102 results := queryFunction(db) 103 if db.Error != nil { 104 return nil, db.Error 105 } 106 107 return results.Value, results.Error 108 }