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 }