Skip to content

Commit

Permalink
fix: revert optional connection in trigger (#322)
Browse files Browse the repository at this point in the history
undo optional connection in trigger
  • Loading branch information
ig-ra committed May 22, 2024
1 parent 109e21b commit e0c4c72
Show file tree
Hide file tree
Showing 12 changed files with 81 additions and 37 deletions.
5 changes: 3 additions & 2 deletions internal/backend/db/dbgorm/gorm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,8 +337,9 @@ func (f *dbFixture) newTrigger() scheme.Trigger {
f.triggerID = incByOne(f.triggerID)

return scheme.Trigger{
TriggerID: f.triggerID,
EnvID: testEnvID,
TriggerID: f.triggerID,
EnvID: testEnvID,
ConnectionID: testConnectionID,
}
}

Expand Down
4 changes: 2 additions & 2 deletions internal/backend/db/dbgorm/projects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,10 @@ func TestDeleteProjectAndDependents(t *testing.T) {
t1, t2 := f.newTrigger(), f.newTrigger()
t1.ProjectID = p1.ProjectID
t1.EnvID = e1p1.EnvID
t1.ConnectionID = &c.ConnectionID
t1.ConnectionID = c.ConnectionID
t2.ProjectID = p1.ProjectID
t2.EnvID = e2p1.EnvID
t1.ConnectionID = &c.ConnectionID
t1.ConnectionID = c.ConnectionID

sig := f.newSignal()
sig.ConnectionID = c.ConnectionID
Expand Down
8 changes: 4 additions & 4 deletions internal/backend/db/dbgorm/scheme/scheme.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,9 +291,9 @@ func ParseEnv(e Env) (sdktypes.Env, error) {
type Trigger struct {
TriggerID sdktypes.UUID `gorm:"primaryKey;type:uuid;not null"`

ProjectID sdktypes.UUID `gorm:"index;type:uuid;not null"`
ConnectionID *sdktypes.UUID `gorm:"index;type:uuid"`
EnvID sdktypes.UUID `gorm:"index;type:uuid;not null"`
ProjectID sdktypes.UUID `gorm:"index;type:uuid;not null"`
ConnectionID sdktypes.UUID `gorm:"index;type:uuid;not null"`
EnvID sdktypes.UUID `gorm:"index;type:uuid;not null"`
Name string
EventType string
Filter string
Expand Down Expand Up @@ -324,7 +324,7 @@ func ParseTrigger(e Trigger) (sdktypes.Trigger, error) {
return sdktypes.StrictTriggerFromProto(&sdktypes.TriggerPB{
TriggerId: sdktypes.NewIDFromUUID[sdktypes.TriggerID](&e.TriggerID).String(),
EnvId: sdktypes.NewIDFromUUID[sdktypes.EnvID](&e.EnvID).String(),
ConnectionId: sdktypes.NewIDFromUUID[sdktypes.ConnectionID](e.ConnectionID).String(),
ConnectionId: sdktypes.NewIDFromUUID[sdktypes.ConnectionID](&e.ConnectionID).String(),
EventType: e.EventType,
Filter: e.Filter,
CodeLocation: loc.ToProto(),
Expand Down
26 changes: 7 additions & 19 deletions internal/backend/db/dbgorm/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,35 +14,23 @@ import (

func triggerToRecord(ctx context.Context, tx *tx, trigger sdktypes.Trigger) (*scheme.Trigger, error) {
connID := trigger.ConnectionID()
var (
conn sdktypes.Connection
err error
projID sdktypes.ProjectID
)

if connID.IsValid() {
conn, err = tx.GetConnection(ctx, connID)
if err != nil {
return nil, fmt.Errorf("get trigger connection: %w", err)
}
projID = conn.ProjectID()

conn, err := tx.GetConnection(ctx, connID)
if err != nil {
return nil, fmt.Errorf("get trigger connection: %w", err)
}

projID := conn.ProjectID()
envID := trigger.EnvID()
if envID.IsValid() {
env, err := tx.GetEnvByID(ctx, envID)
if err != nil {
return nil, fmt.Errorf("get trigger env: %w", err)
}

if projID.IsValid() && projID != env.ProjectID() {
if projID != env.ProjectID() {
return nil, fmt.Errorf("env and connection project mismatch: %v != %v", projID, env.ProjectID())
}
projID = env.ProjectID()
}

if !projID.IsValid() {
return nil, fmt.Errorf("cannot guess projectID. No Env or Connection is provided")
}

data, err := json.Marshal(trigger.Data())
Expand All @@ -57,7 +45,7 @@ func triggerToRecord(ctx context.Context, tx *tx, trigger sdktypes.Trigger) (*sc
TriggerID: trigger.ID().UUIDValue(),
EnvID: envID.UUIDValue(),
ProjectID: projID.UUIDValue(),
ConnectionID: scheme.UUIDOrNil(connID.UUIDValue()),
ConnectionID: connID.UUIDValue(),
EventType: trigger.EventType(),
Filter: trigger.Filter(),
CodeLocation: trigger.CodeLocation().CanonicalString(),
Expand Down
6 changes: 3 additions & 3 deletions internal/backend/db/dbgorm/triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestCreateTriggerForeignKeys(t *testing.T) {

tr.ProjectID = p.ProjectID
tr.EnvID = env.EnvID
tr.ConnectionID = &conn.ConnectionID
tr.ConnectionID = conn.ConnectionID

f.createProjectsAndAssert(t, p)
f.createEnvsAndAssert(t, env)
Expand All @@ -73,9 +73,9 @@ func TestCreateTriggerForeignKeys(t *testing.T) {
assert.ErrorIs(t, createTrigger(f.ctx, f.gormdb, &tr), gorm.ErrForeignKeyViolated)
tr.EnvID = env.EnvID

tr.ConnectionID = &unexisting
tr.ConnectionID = unexisting
assert.ErrorIs(t, createTrigger(f.ctx, f.gormdb, &tr), gorm.ErrForeignKeyViolated)
tr.ConnectionID = &conn.ConnectionID
tr.ConnectionID = conn.ConnectionID

// test with existing assets
f.createTriggersAndAssert(t, tr)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- +goose Up
-- modify "triggers" table
ALTER TABLE "triggers" ALTER COLUMN "connection_id" SET NOT NULL;

-- +goose Down
-- reverse: modify "triggers" table
ALTER TABLE "triggers" ALTER COLUMN "connection_id" DROP NOT NULL;
3 changes: 2 additions & 1 deletion migrations/postgres/atlas.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
h1:KRl9kvYREiEbLL8NSFx/bmIhydXPJ9tcoEfm7BIp4vs=
h1:NrklNkDu+OS2QvtC0nGnprI5gtKaljnd16Bj31Z7oYo=
20240507104234_baseline.sql h1:u+/m2oVxbl8ocxuOGDK5ZvK1FSiFFDWpyDIY9lFOXv4=
20240508111542_secret-string-value.sql h1:LMcOKQmbE418Nmj2HwOaRv6d2X8UQnblUh79EwLsamU=
20240515105256_trigger_opional_connection.sql h1:Yf5xwhI8IpZXfrOvbi7wwWcmggl2f5Z2shOulpxwT0M=
20240515122624_event_optional_connection_and_integration.sql h1:q/k5xsfzA1cbGpHJ1HHVk+ssoN1lqceF8ky272j3aVk=
20240517051313_conn-status.sql h1:Znc5Lu8rusof/IfieCDf/TvW8tG1LyGCGwfjKrkF/Mw=
20240522074209_project_name_non_unique_index.sql h1:+XwG1fO/hBGfjWfZwoXHI0MJYCoVrOzDaivQDV8VSVE=
20240522102628_revert-trigger-optional-connection.sql h1:Ww/LjXR7+BdBzqP5Kh3MkI8Wnu681D0yB+HsE0dyiNg=
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-- +goose Up
-- disable the enforcement of foreign-keys constraints
PRAGMA foreign_keys = off;
-- create "new_triggers" table
CREATE TABLE `new_triggers` (
`trigger_id` uuid NOT NULL,
`project_id` uuid NOT NULL,
`connection_id` uuid NOT NULL,
`env_id` uuid NOT NULL,
`name` text NULL,
`event_type` text NULL,
`filter` text NULL,
`code_location` text NULL,
`data` json NULL,
`unique_name` text NULL,
PRIMARY KEY (`trigger_id`),
CONSTRAINT `fk_triggers_env` FOREIGN KEY (`env_id`) REFERENCES `envs` (`env_id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `fk_triggers_project` FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT `fk_triggers_connection` FOREIGN KEY (`connection_id`) REFERENCES `connections` (`connection_id`) ON UPDATE NO ACTION ON DELETE NO ACTION
);
-- copy rows from old table "triggers" to new temporary table "new_triggers"
INSERT INTO `new_triggers` (`trigger_id`, `project_id`, `connection_id`, `env_id`, `name`, `event_type`, `filter`, `code_location`, `data`, `unique_name`) SELECT `trigger_id`, `project_id`, `connection_id`, `env_id`, `name`, `event_type`, `filter`, `code_location`, `data`, `unique_name` FROM `triggers`;
-- drop "triggers" table after copying rows
DROP TABLE `triggers`;
-- rename temporary table "new_triggers" to "triggers"
ALTER TABLE `new_triggers` RENAME TO `triggers`;
-- create index "idx_triggers_unique_name" to table: "triggers"
CREATE UNIQUE INDEX `idx_triggers_unique_name` ON `triggers` (`unique_name`);
-- create index "idx_triggers_env_id" to table: "triggers"
CREATE INDEX `idx_triggers_env_id` ON `triggers` (`env_id`);
-- create index "idx_triggers_connection_id" to table: "triggers"
CREATE INDEX `idx_triggers_connection_id` ON `triggers` (`connection_id`);
-- create index "idx_triggers_project_id" to table: "triggers"
CREATE INDEX `idx_triggers_project_id` ON `triggers` (`project_id`);
-- enable back the enforcement of foreign-keys constraints
PRAGMA foreign_keys = on;

-- +goose Down
-- reverse: create index "idx_triggers_project_id" to table: "triggers"
DROP INDEX `idx_triggers_project_id`;
-- reverse: create index "idx_triggers_connection_id" to table: "triggers"
DROP INDEX `idx_triggers_connection_id`;
-- reverse: create index "idx_triggers_env_id" to table: "triggers"
DROP INDEX `idx_triggers_env_id`;
-- reverse: create index "idx_triggers_unique_name" to table: "triggers"
DROP INDEX `idx_triggers_unique_name`;
-- reverse: create "new_triggers" table
DROP TABLE `new_triggers`;
3 changes: 2 additions & 1 deletion migrations/sqlite/atlas.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
h1:j9rIwUM/pDmw0pYJB3nvmEtchwgFtktAZleZVZro3jQ=
h1:ihpFvXAd7t6WvVGqbgXm/lP2SnkiIFrugKROl4HFCwQ=
20240507104228_baseline.sql h1:4B9CvzNeSNzEwATnxtK+d00ATCaSZHyr0dwmeuO06RA=
20240508111539_secret-string-value.sql h1:dMpp/HpoRd49wXOZiPKt+Fxjns7Kc4x/aSOvBfLgU6E=
20240515105250_trigger_opional_connection.sql h1:X1SRwT9f2BaswD0wPgqoK5E0NaEyQ4P3r94nMu4WXjA=
20240515122617_event_optional_connection_and_integration.sql h1:ANox4SWiASzAtGp8rbE3uQ2xkcyhMc1mbZlbWH3r3po=
20240517051309_conn-status.sql h1:SrCkbS4tTg//jxGzpYBnHzxAdVacoV8TOH0YbEqHclI=
20240522074202_project_name_non_unique_index.sql h1:bhgBOGFczZQQKnR/Ll01YCGNDyC3uPbFKgKpc9S7nVY=
20240522102623_revert-trigger-optional-connection.sql h1:17Yoa7IVN10VE5o6G+cu+zejIu59kAoL0tXlAUMlCTs=
2 changes: 1 addition & 1 deletion proto/autokitteh/triggers/v1/trigger.proto
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import "buf/validate/validate.proto";
message Trigger {
string trigger_id = 1;
string name = 2;
string connection_id = 3; // could be empty.
string connection_id = 3;
string env_id = 4; // if empty, applies to all envs.
string event_type = 5 [(buf.validate.field).string.min_len = 1];
program.v1.CodeLocation code_location = 6 [(buf.validate.field).required = true];
Expand Down
4 changes: 2 additions & 2 deletions proto/gen/go/autokitteh/triggers/v1/trigger.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions proto/gen/ts/autokitteh/triggers/v1/trigger_pb.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e0c4c72

Please sign in to comment.