searcherside/handlers/cli/migrate.go
Peter Kurfer 9ea9a8f658
Some checks failed
Go build / build (push) Failing after 1m58s
feat: continue basic setup
- setup ent scheme
- add command to create users
- document API
- add helpers to create migrations
- add command to run migrations
- add basic compose file
2024-06-19 21:19:37 +02:00

46 lines
966 B
Go

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
}