1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package database
- import (
- "fmt"
- "time"
- "git.linuxforward.com/byom/byom-onboard/internal/common/models"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- )
- type Database struct {
- db *gorm.DB
- config *Config
- }
- type Config struct {
- MaxOpenConns int
- MaxIdleConns int
- ConnMaxLifetime time.Duration
- ConnMaxIdleTime time.Duration
- }
- var DefaultConfig = &Config{
- MaxOpenConns: 10,
- MaxIdleConns: 2,
- ConnMaxLifetime: 30 * time.Second,
- ConnMaxIdleTime: 30 * time.Second,
- }
- func NewDatabase(dsn string) (*Database, error) {
- gormConfig := &gorm.Config{
- Logger: logger.Default.LogMode(logger.Info),
- NowFunc: func() time.Time {
- return time.Now().UTC()
- },
- }
- db, err := gorm.Open(sqlite.Open(dsn), gormConfig)
- if err != nil {
- return nil, fmt.Errorf("failed to connect to database: %w", err)
- }
- sqlDB, err := db.DB()
- if err != nil {
- return nil, fmt.Errorf("failed to get database instance: %w", err)
- }
- // define
- // Configure connection pool
- sqlDB.SetMaxOpenConns(DefaultConfig.MaxOpenConns)
- sqlDB.SetMaxIdleConns(DefaultConfig.MaxIdleConns)
- sqlDB.SetConnMaxLifetime(DefaultConfig.ConnMaxLifetime)
- sqlDB.SetConnMaxIdleTime(DefaultConfig.ConnMaxIdleTime)
- // Migrate the schema
- err = db.AutoMigrate(&models.User{})
- if err != nil {
- return nil, fmt.Errorf("failed to migrate schema: %w", err)
- }
- return &Database{db: db, config: DefaultConfig}, nil
- }
|