package cli import ( "context" "errors" "fmt" "github.com/alecthomas/kong" "code.icb4dc0.de/prskr/searcherside/core/ports" "code.icb4dc0.de/prskr/searcherside/infrastructure/config" "code.icb4dc0.de/prskr/searcherside/internal/ent" ) type MigrateHandler struct { DB config.DB `embed:"" prefix:"db."` } func (m *MigrateHandler) Run(ctx context.Context, migrator ports.Migrator, client *ent.Client) (err error) { defer func() { err = errors.Join(err, client.Close()) }() req := ports.MigrationRequest{ Driver: m.DB.Driver, URL: m.DB.URL, } if err := migrator.Migrate(ctx, req); err != nil { return fmt.Errorf("failed to apply migrations: %w", err) } return nil } func (m *MigrateHandler) AfterApply(kctx *kong.Context) error { migrator, client, err := m.DB.Migrator() if err != nil { return fmt.Errorf("failed to initialize migrator: %w", err) } kctx.Bind(client) kctx.BindTo(migrator, (*ports.Migrator)(nil)) return nil }