mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-10-28 04:35:40 +00:00 
			
		
		
		
	 ad4fc7ef5f
			
		
	
	ad4fc7ef5f
	
	
	
		
			
			* refactor: don't export non-needed fields * feat: coderabbit suggestions * fix: avoid queries panic
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package service
 | |
| 
 | |
| import (
 | |
| 	"database/sql"
 | |
| 	"tinyauth/internal/assets"
 | |
| 
 | |
| 	"github.com/glebarez/sqlite"
 | |
| 	"github.com/golang-migrate/migrate/v4"
 | |
| 	sqliteMigrate "github.com/golang-migrate/migrate/v4/database/sqlite3"
 | |
| 	"github.com/golang-migrate/migrate/v4/source/iofs"
 | |
| 	"gorm.io/gorm"
 | |
| )
 | |
| 
 | |
| type DatabaseServiceConfig struct {
 | |
| 	DatabasePath string
 | |
| }
 | |
| 
 | |
| type DatabaseService struct {
 | |
| 	config   DatabaseServiceConfig
 | |
| 	database *gorm.DB
 | |
| }
 | |
| 
 | |
| func NewDatabaseService(config DatabaseServiceConfig) *DatabaseService {
 | |
| 	return &DatabaseService{
 | |
| 		config: config,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (ds *DatabaseService) Init() error {
 | |
| 	gormDB, err := gorm.Open(sqlite.Open(ds.config.DatabasePath), &gorm.Config{})
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	sqlDB, err := gormDB.DB()
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	sqlDB.SetMaxOpenConns(1)
 | |
| 
 | |
| 	err = ds.migrateDatabase(sqlDB)
 | |
| 
 | |
| 	if err != nil && err != migrate.ErrNoChange {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	ds.database = gormDB
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (ds *DatabaseService) migrateDatabase(sqlDB *sql.DB) error {
 | |
| 	data, err := iofs.New(assets.Migrations, "migrations")
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	target, err := sqliteMigrate.WithInstance(sqlDB, &sqliteMigrate.Config{})
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	migrator, err := migrate.NewWithInstance("iofs", data, "tinyauth", target)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return migrator.Up()
 | |
| }
 | |
| 
 | |
| func (ds *DatabaseService) GetDatabase() *gorm.DB {
 | |
| 	return ds.database
 | |
| }
 |