github.com/goravel/framework@v1.13.9/database/db/config.go (about) 1 package db 2 3 import ( 4 "fmt" 5 6 "github.com/google/wire" 7 8 "github.com/goravel/framework/contracts/config" 9 databasecontract "github.com/goravel/framework/contracts/database" 10 "github.com/goravel/framework/contracts/database/orm" 11 ) 12 13 var ConfigSet = wire.NewSet(NewConfigImpl, wire.Bind(new(Config), new(*ConfigImpl))) 14 var _ Config = &ConfigImpl{} 15 16 type Config interface { 17 Reads() []databasecontract.Config 18 Writes() []databasecontract.Config 19 } 20 21 type ConfigImpl struct { 22 config config.Config 23 connection string 24 } 25 26 func NewConfigImpl(config config.Config, connection string) *ConfigImpl { 27 return &ConfigImpl{ 28 config: config, 29 connection: connection, 30 } 31 } 32 33 func (c *ConfigImpl) Reads() []databasecontract.Config { 34 configs := c.config.Get(fmt.Sprintf("database.connections.%s.read", c.connection)) 35 if configs, ok := configs.([]databasecontract.Config); ok { 36 return c.fillDefault(configs) 37 } 38 39 return []databasecontract.Config{} 40 } 41 42 func (c *ConfigImpl) Writes() []databasecontract.Config { 43 configs := c.config.Get(fmt.Sprintf("database.connections.%s.write", c.connection)) 44 if configs, ok := configs.([]databasecontract.Config); ok { 45 return c.fillDefault(configs) 46 } 47 48 return c.fillDefault([]databasecontract.Config{{}}) 49 } 50 51 func (c *ConfigImpl) fillDefault(configs []databasecontract.Config) []databasecontract.Config { 52 var newConfigs []databasecontract.Config 53 driver := c.config.GetString(fmt.Sprintf("database.connections.%s.driver", c.connection)) 54 for _, item := range configs { 55 if driver != orm.DriverSqlite.String() { 56 if item.Host == "" { 57 item.Host = c.config.GetString(fmt.Sprintf("database.connections.%s.host", c.connection)) 58 } 59 if item.Port == 0 { 60 item.Port = c.config.GetInt(fmt.Sprintf("database.connections.%s.port", c.connection)) 61 } 62 if item.Username == "" { 63 item.Username = c.config.GetString(fmt.Sprintf("database.connections.%s.username", c.connection)) 64 } 65 if item.Password == "" { 66 item.Password = c.config.GetString(fmt.Sprintf("database.connections.%s.password", c.connection)) 67 } 68 } 69 if item.Database == "" { 70 item.Database = c.config.GetString(fmt.Sprintf("database.connections.%s.database", c.connection)) 71 } 72 newConfigs = append(newConfigs, item) 73 } 74 75 return newConfigs 76 }