3
0
Files
corteza/pkg/provision/reports.go
2022-09-30 10:07:47 +02:00

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...)
})
}