package database import ( "antrian-operasi/internal/config" "database/sql" "fmt" ) func (s *service) openMySQLConnection(config config.DatabaseConfig) (*sql.DB, error) { // Build connection string with security parameters connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?parseTime=true&timeout=%s&readTimeout=%s&writeTimeout=%s", config.Username, config.Password, config.Host, config.Port, config.Database, config.Timeout, config.ReadTimeout, config.WriteTimeout, ) // Add SSL configuration if required if config.RequireSSL { connStr += "&tls=true" if config.SSLRootCert != "" { connStr += "&ssl-ca=" + config.SSLRootCert } if config.SSLCert != "" { connStr += "&ssl-cert=" + config.SSLCert } if config.SSLKey != "" { connStr += "&ssl-key=" + config.SSLKey } } // Open connection db, err := sql.Open("mysql", connStr) if err != nil { return nil, fmt.Errorf("failed to open MySQL connection: %w", err) } return db, nil }