package console import ( "context" "fmt" "git.golem15.com/golem15/sm-user-plugin/classes" "git.golem15.com/golem15/sm-user-plugin/models" "git.golem15.com/golem15/summercms/modules/backpack" "git.golem15.com/golem15/summercms/modules/bonfire" "gorm.io/gorm" ) // BackfillHandles fills a unique handle on every user row that still has none. func BackfillHandles(app *backpack.App) bonfire.Command { return bonfire.Command{ Name: "user:backfill-handles", Description: "Assign unique handles to users that do not have one (D-15)", Run: func(ctx context.Context, _ bonfire.Input, out bonfire.Output) error { if app == nil { return fmt.Errorf("user:backfill-handles: app is nil") } gdb, ok := app.Lookup[*gorm.DB]() if !ok || gdb == nil { return fmt.Errorf("user:backfill-handles: database is not configured") } var users []models.User if err := gdb.WithContext(ctx).Where("handle IS NULL OR handle = ''").Find(&users).Error; err != nil { return err } n := 0 for i := range users { if err := classes.AssignHandle(ctx, gdb, &users[i]); err != nil { return err } n++ } out.Success(fmt.Sprintf("Assigned handles to %d user(s)", n)) return nil }, } }