package migrations import ( "context" "database/sql" "fmt" "github.com/pressly/goose/v3" "reichard.io/antholume/utils" ) func init() { goose.AddMigrationContext(upUserAuthHash, downUserAuthHash) } func upUserAuthHash(ctx context.Context, tx *sql.Tx) error { // Create now column _, err := tx.Exec("ALTER TABLE users ADD COLUMN auth_hash TEXT") if err != nil { return err } // Get current users rows, err := tx.Query("SELECT id FROM users") if err != nil { return err } // Query existing users var users []string for rows.Next() { var user string if err := rows.Scan(&user); err != nil { return err } users = append(users, user) } // Create auth hash per user for _, user := range users { rawAuthHash, err := utils.GenerateToken(64) if err != nil { return err } authHash := fmt.Sprintf("%x", rawAuthHash) _, err = tx.Exec("UPDATE users SET auth_hash = ? WHERE id = ?", authHash, user) if err != nil { return err } } return nil } func downUserAuthHash(ctx context.Context, tx *sql.Tx) error { // Drop column _, err := tx.Exec("ALTER users DROP COLUMN auth_hash") if err != nil { return err } return nil }