package migrationsimport ("context""database/sql""strings""github.com/pressly/goose/v3")func init() {goose.AddMigrationContext(upPlayQueueCurrentToIndex, downPlayQueueCurrentToIndex)}func upPlayQueueCurrentToIndex(ctx context.Context, tx *sql.Tx) error {_, err := tx.ExecContext(ctx, `create table playqueue_dg_tmp(id varchar(255) not null,user_id varchar(255) not nullreferences user(id)on update cascade on delete cascade,current integer not null default 0,position real,changed_by varchar(255),items varchar(255),created_at datetime,updated_at datetime);`)if err != nil {return err}rows, err := tx.QueryContext(ctx, `select id, user_id, current, position, changed_by, items, created_at, updated_at from playqueue`)if err != nil {return err}defer rows.Close()stmt, err := tx.PrepareContext(ctx, `insert into playqueue_dg_tmp(id, user_id, current, position, changed_by, items, created_at, updated_at) values(?,?,?,?,?,?,?,?)`)if err != nil {return err}defer stmt.Close()for rows.Next() {var id, userID, currentID, changedBy, items stringvar position sql.NullFloat64var createdAt, updatedAt sql.NullStringif err = rows.Scan(&id, &userID, ¤tID, &position, &changedBy, &items, &createdAt, &updatedAt); err != nil {return err}index := 0if currentID != "" && items != "" {parts := strings.Split(items, ",")for i, p := range parts {if p == currentID {index = ibreak}}}_, err = stmt.Exec(id, userID, index, position, changedBy, items, createdAt, updatedAt)if err != nil {return err}}if err = rows.Err(); err != nil {return err}if _, err = tx.ExecContext(ctx, `drop table playqueue;`); err != nil {return err}_, err = tx.ExecContext(ctx, `alter table playqueue_dg_tmp rename to playqueue;`)return err}func downPlayQueueCurrentToIndex(_ context.Context, _ *sql.Tx) error {return nil}