[TASK] add database connection
This commit is contained in:
		
							parent
							
								
									2921580e11
								
							
						
					
					
						commit
						75a378a0cd
					
				|  | @ -10,6 +10,7 @@ import ( | ||||||
| 	goji "goji.io" | 	goji "goji.io" | ||||||
| 
 | 
 | ||||||
| 	web "github.com/genofire/hs_master-kss-monolith/http" | 	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/lib/log" | ||||||
| 	"github.com/genofire/hs_master-kss-monolith/models" | 	"github.com/genofire/hs_master-kss-monolith/models" | ||||||
| ) | ) | ||||||
|  | @ -28,6 +29,11 @@ func main() { | ||||||
| 
 | 
 | ||||||
| 	log.Log.Info("Starting rezension monolith") | 	log.Log.Info("Starting rezension monolith") | ||||||
| 
 | 
 | ||||||
|  | 	err := database.Open(config.Database) | ||||||
|  | 	if err != nil{ | ||||||
|  | 		log.Log.Panic(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// Startwebsrver
 | 	// Startwebsrver
 | ||||||
| 	router := goji.NewMux() | 	router := goji.NewMux() | ||||||
| 	web.BindAPI(router) | 	web.BindAPI(router) | ||||||
|  | @ -44,6 +50,7 @@ func main() { | ||||||
| 
 | 
 | ||||||
| 	// Stop services
 | 	// Stop services
 | ||||||
| 	srv.Close() | 	srv.Close() | ||||||
|  | 	database.Close() | ||||||
| 
 | 
 | ||||||
| 	log.Log.Info("received", sig) | 	log.Log.Info("received", sig) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1 +1,7 @@ | ||||||
| webserver_bind = ":8080" | webserver_bind = ":8080" | ||||||
|  | 
 | ||||||
|  | [database] | ||||||
|  | type = "sqlite" | ||||||
|  | connection = "file::memory:?mode=memory&cache=shared" | ||||||
|  | # For Master-Slave cluster | ||||||
|  | # read_connection = "" | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | package database | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -4,11 +4,19 @@ import ( | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 
 | 
 | ||||||
| 	"github.com/influxdata/toml" | 	"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
 | //Config the config File of this daemon
 | ||||||
| type Config struct { | type Config struct { | ||||||
| 	WebserverBind string | 	WebserverBind string | ||||||
|  | 	Database struct { | ||||||
|  | 		Type string | ||||||
|  | 		Connection string | ||||||
|  | 		ReadConnection string | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ReadConfigFile reads a config model from path of a yml file
 | // ReadConfigFile reads a config model from path of a yml file
 | ||||||
|  | @ -16,11 +24,11 @@ func ReadConfigFile(path string) *Config { | ||||||
| 	config := &Config{} | 	config := &Config{} | ||||||
| 	file, err := ioutil.ReadFile(path) | 	file, err := ioutil.ReadFile(path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		panic(err) | 		log.Log.Panic(err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := toml.Unmarshal(file, config); err != nil { | 	if err := toml.Unmarshal(file, config); err != nil { | ||||||
| 		panic(err) | 		log.Log.Panic(err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return config | 	return config | ||||||
|  |  | ||||||
		Reference in New Issue