feat(backend): establish gin sqlite service skeleton
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user