From 75a378a0cd2600ebe5fba31871a031b114e21868 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Thu, 30 Mar 2017 16:09:44 +0200 Subject: [PATCH] [TASK] add database connection --- cmd/review/main.go | 7 ++++++ config_example.conf | 6 +++++ lib/database/main.go | 49 +++++++++++++++++++++++++++++++++++++++ lib/database/main_test.go | 3 +++ models/config.go | 12 ++++++++-- 5 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 lib/database/main.go create mode 100644 lib/database/main_test.go diff --git a/cmd/review/main.go b/cmd/review/main.go index e8b671a..481a406 100644 --- a/cmd/review/main.go +++ b/cmd/review/main.go @@ -10,6 +10,7 @@ import ( goji "goji.io" web "github.com/genofire/hs_master-kss-monolith/http" + "github.com/genofire/hs_master-kss-monolith/lib/database" "github.com/genofire/hs_master-kss-monolith/lib/log" "github.com/genofire/hs_master-kss-monolith/models" ) @@ -28,6 +29,11 @@ func main() { log.Log.Info("Starting rezension monolith") + err := database.Open(config.Database) + if err != nil{ + log.Log.Panic(err) + } + // Startwebsrver router := goji.NewMux() web.BindAPI(router) @@ -44,6 +50,7 @@ func main() { // Stop services srv.Close() + database.Close() log.Log.Info("received", sig) } diff --git a/config_example.conf b/config_example.conf index d8218a4..7ea9664 100644 --- a/config_example.conf +++ b/config_example.conf @@ -1 +1,7 @@ webserver_bind = ":8080" + +[database] +type = "sqlite" +connection = "file::memory:?mode=memory&cache=shared" +# For Master-Slave cluster +# read_connection = "" diff --git a/lib/database/main.go b/lib/database/main.go new file mode 100644 index 0000000..b7d4c11 --- /dev/null +++ b/lib/database/main.go @@ -0,0 +1,49 @@ +package database + +import ( + "errors" + + "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/sqlite" + _ "github.com/jinzhu/gorm/dialects/postgres" +) + +var ( + Write *gorm.Database + Read *gorm.Database + config *Config + models []interface{} +) + + +type Config struct { + Type string + Connection string + ReadConnection string +} + +func Open(c Config) (err errors.Error) { + config = &c + Write, err = gorm.Open(config.Type, config.Connection) + if err != nil { + return + } + if len(config.ReadConnection) > 0 { + Read, err = gorm.Open(config.Type, config.ReadConnection) + } else { + Read = Write + } + Write.AutoMigrate(models...) + return +} + +func Close() { + Write.Close() + if len(config.ReadConnection) > 0 { + Read.Close() + } +} + +func AddModel(m interface{}) { + models = append(models, m) +} diff --git a/lib/database/main_test.go b/lib/database/main_test.go new file mode 100644 index 0000000..5d73fd9 --- /dev/null +++ b/lib/database/main_test.go @@ -0,0 +1,3 @@ +package database + + diff --git a/models/config.go b/models/config.go index 2ecbd6d..dcffaa8 100644 --- a/models/config.go +++ b/models/config.go @@ -4,11 +4,19 @@ import ( "io/ioutil" "github.com/influxdata/toml" + + "github.com/genofire/hs_master-kss-monolith/lib/log" + "github.com/genofire/hs_master-kss-monolith/lib/database" ) //Config the config File of this daemon type Config struct { WebserverBind string + Database struct { + Type string + Connection string + ReadConnection string + } } // ReadConfigFile reads a config model from path of a yml file @@ -16,11 +24,11 @@ func ReadConfigFile(path string) *Config { config := &Config{} file, err := ioutil.ReadFile(path) if err != nil { - panic(err) + log.Log.Panic(err) } if err := toml.Unmarshal(file, config); err != nil { - panic(err) + log.Log.Panic(err) } return config