mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/formancehq/stack/libs/go-libs/migrations"
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
func Migrate(ctx context.Context, db *bun.DB) error {
|
|
migrator := migrations.NewMigrator()
|
|
registerMigrations(migrator)
|
|
|
|
return migrator.Up(ctx, db)
|
|
}
|
|
|
|
func registerMigrations(migrator *migrations.Migrator) {
|
|
migrator.RegisterMigrations(
|
|
migrations.Migration{
|
|
Up: func(tx bun.Tx) error {
|
|
if _, err := tx.Exec(`
|
|
create table "workflows" (
|
|
config jsonb,
|
|
id varchar not null,
|
|
created_at timestamp default now(),
|
|
updated_at timestamp default now(),
|
|
primary key (id)
|
|
);
|
|
create table "workflow_instances" (
|
|
workflow_id varchar references workflows (id),
|
|
id varchar,
|
|
created_at timestamp default now(),
|
|
updated_at timestamp default now(),
|
|
primary key (id)
|
|
);
|
|
create table "workflow_instance_stage_statuses" (
|
|
instance_id varchar references workflow_instances (id),
|
|
stage int,
|
|
started_at timestamp default now(),
|
|
terminated_at timestamp default null,
|
|
error varchar,
|
|
primary key (instance_id, stage)
|
|
);
|
|
`); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
},
|
|
migrations.Migration{
|
|
Up: func(tx bun.Tx) error {
|
|
if _, err := tx.Exec(`
|
|
alter table "workflow_instances" add column terminated bool;
|
|
alter table "workflow_instances" add column terminated_at timestamp default null;
|
|
`); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
},
|
|
migrations.Migration{
|
|
Up: func(tx bun.Tx) error {
|
|
if _, err := tx.Exec(`
|
|
alter table "workflow_instances" add column error varchar;
|
|
`); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
},
|
|
migrations.Migration{
|
|
Up: func(tx bun.Tx) error {
|
|
if _, err := tx.Exec(`
|
|
alter table "workflows" add column if not exists deleted_at timestamp default null;
|
|
`); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
},
|
|
migrations.Migration{
|
|
Up: func(tx bun.Tx) error {
|
|
if _, err := tx.Exec(`
|
|
create table triggers (
|
|
id varchar primary key,
|
|
workflow_id varchar references workflows(id),
|
|
filter varchar null,
|
|
event varchar not null,
|
|
vars jsonb,
|
|
created_at timestamp not null default now(),
|
|
deleted_at timestamp default null
|
|
);
|
|
create table triggers_occurrences (
|
|
workflow_instance_id varchar references workflow_instances(id),
|
|
trigger_id varchar references triggers(id),
|
|
event_id varchar not null,
|
|
date timestamp not null default now(),
|
|
event jsonb not null,
|
|
primary key (trigger_id, event_id)
|
|
);
|
|
`); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
},
|
|
)
|
|
}
|