58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package migration
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"database/sql"
|
||
|
|
|
||
|
|
"cmroubao/backend-api/migrations"
|
||
|
|
|
||
|
|
"github.com/pressly/goose/v3"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Status struct {
|
||
|
|
Version int64
|
||
|
|
Applied bool
|
||
|
|
}
|
||
|
|
|
||
|
|
type Runner struct {
|
||
|
|
provider *goose.Provider
|
||
|
|
}
|
||
|
|
|
||
|
|
func New(db *sql.DB) (*Runner, error) {
|
||
|
|
provider, err := goose.NewProvider(
|
||
|
|
goose.DialectSQLite3,
|
||
|
|
db,
|
||
|
|
migrations.Files,
|
||
|
|
goose.WithDisableGlobalRegistry(true),
|
||
|
|
)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &Runner{provider: provider}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *Runner) Up(ctx context.Context) (int, error) {
|
||
|
|
results, err := r.provider.Up(ctx)
|
||
|
|
return len(results), err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *Runner) Down(ctx context.Context) error {
|
||
|
|
_, err := r.provider.Down(ctx)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *Runner) Status(ctx context.Context) ([]Status, error) {
|
||
|
|
results, err := r.provider.Status(ctx)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
statuses := make([]Status, 0, len(results))
|
||
|
|
for _, result := range results {
|
||
|
|
statuses = append(statuses, Status{
|
||
|
|
Version: result.Source.Version,
|
||
|
|
Applied: result.State == goose.StateApplied,
|
||
|
|
})
|
||
|
|
}
|
||
|
|
return statuses, nil
|
||
|
|
}
|