You've already forked orderservice
feat: added migrations
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
"errors"
|
||||
"flag"
|
||||
"log"
|
||||
|
||||
"orderservice/internal/config"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/golang-migrate/migrate/v4/database/postgres"
|
||||
"github.com/golang-migrate/migrate/v4/source/iofs"
|
||||
)
|
||||
|
||||
//go:embed migrations/*.sql
|
||||
var migrationsFS embed.FS
|
||||
|
||||
func main() {
|
||||
var cmd string
|
||||
|
||||
flag.StringVar(&cmd, "cmd", "up", "migration command: up|down|force|version")
|
||||
flag.Parse()
|
||||
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load config: %v", err)
|
||||
}
|
||||
|
||||
db, err := sql.Open("postgres", cfg.BuildPostgresDSN())
|
||||
if err != nil {
|
||||
log.Fatalf("open db: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
drv, err := postgres.WithInstance(db, &postgres.Config{})
|
||||
if err != nil {
|
||||
log.Printf("postgres driver: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
src, err := iofs.New(migrationsFS, "migrations")
|
||||
if err != nil {
|
||||
log.Printf("iofs source: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
m, err := migrate.NewWithInstance("iofs", src, "postgres", drv)
|
||||
if err != nil {
|
||||
log.Printf("migrate NewWithInstance: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
switch cmd {
|
||||
case "up":
|
||||
if err := m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
||||
log.Printf("m.Up failed: %v", err)
|
||||
return
|
||||
}
|
||||
log.Println("migrations applied (up)")
|
||||
case "down":
|
||||
if err := m.Steps(-1); err != nil {
|
||||
log.Printf("m.Steps(-1) failed: %v", err)
|
||||
return
|
||||
}
|
||||
log.Println("stepped down 1 migration")
|
||||
case "version":
|
||||
v, dirty, verr := m.Version()
|
||||
if verr != nil {
|
||||
log.Printf("version: %v", verr)
|
||||
return
|
||||
}
|
||||
log.Printf("version: %d dirty: %v\n", v, dirty)
|
||||
default:
|
||||
log.Printf("unknown cmd: %s", cmd)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
drop table if exists orders;
|
||||
@@ -0,0 +1,5 @@
|
||||
create table if not exists orders (
|
||||
id uuid primary key,
|
||||
item varchar(500) not null,
|
||||
quantity integer not null check (quantity > 0)
|
||||
);
|
||||
Reference in New Issue
Block a user