diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e7fd89c467..939a0311b77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ The order and collapsed state of columns is now persisted across page navigation ### Bug fixes and improvements +- cli: add retry_conf in event trigger for squashing migrations (close #4296) (#4324) - cli: allow customization of server api paths (close #4016) - cli: clean up migration files created during a failed migrate api (close #4312) (#4319) - cli: add support for multiple versions of plugin (close #4105) diff --git a/cli/migrate/database/hasuradb/squash.go b/cli/migrate/database/hasuradb/squash.go index 86114ac307b..e31fc14a205 100644 --- a/cli/migrate/database/hasuradb/squash.go +++ b/cli/migrate/database/hasuradb/squash.go @@ -40,14 +40,23 @@ func (q CustomQuery) MergeEventTriggers(squashList *database.CustomList) error { prevElems := make([]*list.Element, 0) for _, val := range g.Group { element := val.(*list.Element) - switch element.Value.(type) { - case *trackTableInput: + switch obj := element.Value.(type) { + case *createEventTriggerInput: + if obj.Replace { + for _, e := range prevElems { + squashList.Remove(e) + } + err := eventTriggerTransition.Trigger("delete_event_trigger", &evCfg, nil) + if err != nil { + return err + } + } err := eventTriggerTransition.Trigger("create_event_trigger", &evCfg, nil) if err != nil { return err } prevElems = append(prevElems, element) - case *unTrackTableInput: + case *deleteEventTriggerInput: err := eventTriggerTransition.Trigger("delete_event_trigger", &evCfg, nil) if err != nil { return err diff --git a/cli/migrate/database/hasuradb/types.go b/cli/migrate/database/hasuradb/types.go index c74d5134a78..06b432d9556 100644 --- a/cli/migrate/database/hasuradb/types.go +++ b/cli/migrate/database/hasuradb/types.go @@ -475,10 +475,17 @@ type createEventTriggerInput struct { Definition *createEventTriggerOperationInput `json:"definition,omitempty" yaml:"definition,omitempty"` Headers interface{} `json:"headers" yaml:"headers"` Replace bool `json:"replace" yaml:"replace"` + RetryConf *createEventTriggerRetryConfInput `json:"retry_conf" yaml:"retry_conf"` createEventTriggerOperationInput } +type createEventTriggerRetryConfInput struct { + IntervalSec int `json:"interval_sec" yaml:"interval_sec"` + NumRetries int `json:"num_retries" yaml:"num_retries"` + TimeOutSec int `json:"timeout_sec" yaml:"timeout_sec"` +} + type createEventTriggerOperationInput struct { Insert interface{} `json:"insert,omitempty" yaml:"insert,omitempty"` Update interface{} `json:"update,omitempty" yaml:"update,omitempty"` @@ -493,15 +500,16 @@ func (c *createEventTriggerInput) MarshalJSON() ([]byte, error) { c.Definition = nil } return json.Marshal(&struct { - Name string `json:"name" yaml:"name"` - Table tableSchema `json:"table" yaml:"table"` - Webhook string `json:"webhook,omitempty" yaml:"webhook,omitempty"` - WebhookFromEnv string `json:"webhook_from_env,omitempty" yaml:"webhook_from_env,omitempty"` - Headers interface{} `json:"headers" yaml:"headers"` - Replace bool `json:"replace" yaml:"replace"` - Insert interface{} `json:"insert,omitempty" yaml:"insert,omitempty"` - Update interface{} `json:"update,omitempty" yaml:"update,omitempty"` - Delete interface{} `json:"delete,omitempty" yaml:"delete,omitempty"` + Name string `json:"name" yaml:"name"` + Table tableSchema `json:"table" yaml:"table"` + Webhook string `json:"webhook,omitempty" yaml:"webhook,omitempty"` + WebhookFromEnv string `json:"webhook_from_env,omitempty" yaml:"webhook_from_env,omitempty"` + Headers interface{} `json:"headers" yaml:"headers"` + Replace bool `json:"replace" yaml:"replace"` + RetryConf *createEventTriggerRetryConfInput `json:"retry_conf" yaml:"retry_conf"` + Insert interface{} `json:"insert,omitempty" yaml:"insert,omitempty"` + Update interface{} `json:"update,omitempty" yaml:"update,omitempty"` + Delete interface{} `json:"delete,omitempty" yaml:"delete,omitempty"` }{ Name: c.Name, Table: c.Table, @@ -509,6 +517,7 @@ func (c *createEventTriggerInput) MarshalJSON() ([]byte, error) { WebhookFromEnv: c.WebhookFromEnv, Headers: c.Headers, Replace: c.Replace, + RetryConf: c.RetryConf, Insert: c.Insert, Update: c.Update, Delete: c.Delete,