authorizer/server/db/providers/sql/provider.go

67 lines
2.0 KiB
Go
Raw Normal View History

2022-01-21 06:48:07 +00:00
package sql
import (
2022-02-05 03:30:56 +00:00
"log"
"os"
"time"
2022-01-21 06:48:07 +00:00
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/envstore"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/driver/sqlserver"
"gorm.io/gorm"
2022-02-05 03:30:56 +00:00
"gorm.io/gorm/logger"
2022-01-21 06:48:07 +00:00
"gorm.io/gorm/schema"
)
type provider struct {
db *gorm.DB
}
// NewProvider returns a new SQL provider
func NewProvider() (*provider, error) {
var sqlDB *gorm.DB
var err error
2022-02-05 03:30:56 +00:00
customLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Silent, // Log level
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
Colorful: false, // Disable color
},
)
2022-01-21 06:48:07 +00:00
ormConfig := &gorm.Config{
2022-02-05 03:30:56 +00:00
Logger: customLogger,
2022-01-21 06:48:07 +00:00
NamingStrategy: schema.NamingStrategy{
TablePrefix: models.Prefix,
},
}
2022-02-28 02:25:01 +00:00
switch envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) {
2022-02-12 07:49:31 +00:00
case constants.DbTypePostgres, constants.DbTypeYugabyte:
2022-02-28 02:25:01 +00:00
sqlDB, err = gorm.Open(postgres.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
2022-01-21 06:48:07 +00:00
case constants.DbTypeSqlite:
2022-02-28 02:25:01 +00:00
sqlDB, err = gorm.Open(sqlite.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
2022-02-12 17:19:53 +00:00
case constants.DbTypeMysql, constants.DbTypeMariaDB:
2022-02-28 02:25:01 +00:00
sqlDB, err = gorm.Open(mysql.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
2022-01-21 06:48:07 +00:00
case constants.DbTypeSqlserver:
2022-02-28 02:25:01 +00:00
sqlDB, err = gorm.Open(sqlserver.Open(envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
2022-01-21 06:48:07 +00:00
}
if err != nil {
return nil, err
}
2022-03-02 12:12:31 +00:00
err = sqlDB.AutoMigrate(&models.User{}, &models.VerificationRequest{}, &models.Session{}, &models.Env{})
if err != nil {
return nil, err
}
2022-01-21 06:48:07 +00:00
return &provider{
db: sqlDB,
}, nil
}