77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package provision
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cortezaproject/corteza-server/pkg/filter"
|
|
"github.com/cortezaproject/corteza-server/store"
|
|
"github.com/cortezaproject/corteza-server/system/types"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func migrateReports(ctx context.Context, log *zap.Logger, s store.Storer) (err error) {
|
|
reports, _, err := store.SearchReports(ctx, s, types.ReportFilter{
|
|
Deleted: filter.StateExcluded,
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
mustMigrate := false
|
|
for _, r := range reports {
|
|
for _, s := range r.Sources {
|
|
mustMigrate = mustMigrate || (s.Step != nil && s.Step.Group_legacy != nil && s.Step.Link == nil)
|
|
}
|
|
for _, b := range r.Blocks {
|
|
for _, s := range b.Sources {
|
|
mustMigrate = mustMigrate || (s != nil && s.Group_legacy != nil && s.Link == nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
if !mustMigrate {
|
|
return
|
|
}
|
|
|
|
ds := func(step *types.ReportStep) {
|
|
if step.Join != nil {
|
|
step.Kind = "link"
|
|
step.Link = &types.ReportStepLink{
|
|
Name: step.Join.Name,
|
|
LocalSource: step.Join.LocalSource,
|
|
LocalColumn: step.Join.LocalColumn,
|
|
ForeignSource: step.Join.ForeignSource,
|
|
ForeignColumn: step.Join.ForeignColumn,
|
|
Filter: step.Join.Filter,
|
|
}
|
|
step.Join = nil
|
|
}
|
|
if step.Group_legacy != nil {
|
|
step.Kind = "aggregate"
|
|
step.Aggregate = &types.ReportStepAggregate{
|
|
Name: step.Group_legacy.Name,
|
|
Source: step.Group_legacy.Source,
|
|
Keys: step.Group_legacy.Keys,
|
|
Columns: step.Group_legacy.Columns,
|
|
Filter: step.Group_legacy.Filter,
|
|
}
|
|
step.Group_legacy = nil
|
|
}
|
|
}
|
|
|
|
for _, r := range reports {
|
|
for _, s := range r.Sources {
|
|
ds(s.Step)
|
|
}
|
|
for _, b := range r.Blocks {
|
|
for _, s := range b.Sources {
|
|
ds(s)
|
|
}
|
|
}
|
|
}
|
|
|
|
return store.Tx(ctx, s, func(ctx context.Context, s store.Storer) error {
|
|
return store.UpdateReport(ctx, s, reports...)
|
|
})
|
|
}
|