package database import ( "fmt" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func Migrate(db *gorm.DB) error { if err := db.AutoMigrate(&User{}, &Role{}); err != nil { return fmt.Errorf("auto-migrate: %w", err) } defaultRoles := []Role{ {Name: "superadmin"}, {Name: "admin"}, {Name: "editor"}, {Name: "author"}, {Name: "viewer"}, } for _, r := range defaultRoles { if err := db.FirstOrCreate(&r, Role{Name: r.Name}).Error; err != nil { return fmt.Errorf("seed role %q: %w", r.Name, err) } } return nil } func NewDB(driver, dsn string) (*gorm.DB, error) { var dialector gorm.Dialector switch driver { case "sqlite": dialector = sqlite.Open(dsn) case "postgres": dialector = postgres.Open(dsn) default: return nil, fmt.Errorf("unsupported database driver: %s", driver) } db, err := gorm.Open(dialector, &gorm.Config{}) if err != nil { return nil, fmt.Errorf("failed to open database: %w", err) } return db, nil }