Add provision for report migration

This commit is contained in:
Tomaž Jerman
2022-09-30 10:07:47 +02:00
parent 4400929c4d
commit 79f3c4ba46
3 changed files with 89 additions and 0 deletions
+1
View File
@@ -28,6 +28,7 @@ func Run(ctx context.Context, log *zap.Logger, s store.Storer, provisionOpt opti
ffn := []func() error{
// Migrations:
// (placeholder for all post 2022.3.x modifications)
func() error { return migrateReports(ctx, log.Named("reports"), s) },
// *************************************************************************************************************
+76
View File
@@ -0,0 +1,76 @@
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...)
})
}
+12
View File
@@ -74,6 +74,10 @@ type (
Join *ReportStepJoin `json:"join,omitempty"`
Link *ReportStepLink `json:"link,omitempty"`
Aggregate *ReportStepAggregate `json:"aggregate,omitempty"`
// @todo remove for the next set of patch/major releases.
// it exists just for the migration as we need to rename this one.
Group_legacy *ReportLegacyStepGroup `json:"group,omitempty"`
}
ReportStepLoad struct {
@@ -101,6 +105,14 @@ type (
Filter *ReportFilterExpr `json:"filter,omitempty"`
}
ReportLegacyStepGroup struct {
Name string `json:"name"`
Source string `json:"source"`
Keys ReportAggregateColumnSet `json:"keys"`
Columns ReportAggregateColumnSet `json:"columns"`
Filter *ReportFilterExpr `json:"filter,omitempty"`
}
ReportStepAggregate struct {
Name string `json:"name"`
Source string `json:"source"`