github.com/jxgolibs/go-oauth2-server@v1.0.1/database/database.go (about)

     1  package database
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/RichardKnop/go-oauth2-server/config"
     8  	"github.com/jinzhu/gorm"
     9  	// Drivers
    10  	_ "github.com/lib/pq"
    11  )
    12  
    13  func init() {
    14  	gorm.NowFunc = func() time.Time {
    15  		return time.Now().UTC()
    16  	}
    17  }
    18  
    19  // NewDatabase returns a gorm.DB struct, gorm.DB.DB() returns a database handle
    20  // see http://golang.org/pkg/database/sql/#DB
    21  func NewDatabase(cnf *config.Config) (*gorm.DB, error) {
    22  	// Postgres
    23  	if cnf.Database.Type == "postgres" {
    24  		// Connection args
    25  		// see https://godoc.org/github.com/lib/pq#hdr-Connection_String_Parameters
    26  		args := fmt.Sprintf(
    27  			"sslmode=disable host=%s port=%d user=%s password='%s' dbname=%s",
    28  			cnf.Database.Host,
    29  			cnf.Database.Port,
    30  			cnf.Database.User,
    31  			cnf.Database.Password,
    32  			cnf.Database.DatabaseName,
    33  		)
    34  
    35  		db, err := gorm.Open(cnf.Database.Type, args)
    36  		if err != nil {
    37  			return db, err
    38  		}
    39  
    40  		// Max idle connections
    41  		db.DB().SetMaxIdleConns(cnf.Database.MaxIdleConns)
    42  
    43  		// Max open connections
    44  		db.DB().SetMaxOpenConns(cnf.Database.MaxOpenConns)
    45  
    46  		// Database logging
    47  		db.LogMode(cnf.IsDevelopment)
    48  
    49  		return db, nil
    50  	}
    51  
    52  	// Database type not supported
    53  	return nil, fmt.Errorf("Database type %s not suppported", cnf.Database.Type)
    54  }