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  }