From 9539c42e0b8e0b8bb797d901e269d5d6601b5aca Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Wed, 19 Feb 2020 10:26:34 +0100 Subject: [PATCH] Add array of SignalIDs to widget data model --- database/models.go | 3 +++ database/testdata.go | 7 ++++++- go.mod | 1 + routes/widget/widget_methods.go | 1 + routes/widget/widget_test.go | 7 +++++++ routes/widget/widget_validators.go | 4 ++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/database/models.go b/database/models.go index 0ab8fc6..9251669 100644 --- a/database/models.go +++ b/database/models.go @@ -22,6 +22,7 @@ package database import ( + "github.com/lib/pq" "time" "github.com/jinzhu/gorm/dialects/postgres" @@ -175,6 +176,8 @@ type Widget struct { DashboardID uint `json:"dashboardID"` // Files that belong to widget (for example images) Files []File `json:"-" gorm:"foreignkey:WidgetID"` + // IDs of signals that widget uses + SignalIDs pq.Int64Array `json:"signalIDs" gorm:"type:integer[]"` } // File data model diff --git a/database/testdata.go b/database/testdata.go index 2d44e40..dfd0a04 100644 --- a/database/testdata.go +++ b/database/testdata.go @@ -212,6 +212,7 @@ var WidgetA = Widget{ Z: 200, IsLocked: false, CustomProperties: postgres.Jsonb{customPropertiesLabel}, + SignalIDs: []int64{1}, } var WidgetB = Widget{ @@ -226,6 +227,7 @@ var WidgetB = Widget{ Z: 0, IsLocked: false, CustomProperties: postgres.Jsonb{customPropertiesSlider}, + SignalIDs: []int64{1}, } var WidgetC = Widget{ @@ -240,6 +242,7 @@ var WidgetC = Widget{ Z: 0, IsLocked: false, CustomProperties: postgres.Jsonb{customPropertiesBox}, + SignalIDs: []int64{3}, } var WidgetD = Widget{ @@ -253,7 +256,8 @@ var WidgetD = Widget{ Y: 50, Z: 0, IsLocked: false, - CustomProperties: postgres.Jsonb{customPropertiesBox}, + CustomProperties: postgres.Jsonb{customPropertiesCustomActions}, + SignalIDs: []int64{2}, } var WidgetE = Widget{ @@ -268,6 +272,7 @@ var WidgetE = Widget{ Z: 0, IsLocked: false, CustomProperties: postgres.Jsonb{customPropertiesLamp}, + SignalIDs: []int64{4}, } func DBAddAdminUser(db *gorm.DB) error { diff --git a/go.mod b/go.mod index 47db705..bc8359f 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/go-playground/universal-translator v0.17.0 // indirect github.com/jinzhu/gorm v1.9.11 github.com/leodido/go-urn v1.2.0 // indirect + github.com/lib/pq v1.1.1 github.com/nsf/jsondiff v0.0.0-20190712045011-8443391ee9b6 github.com/prometheus/client_golang v1.2.1 github.com/smartystreets/goconvey v1.6.4 // indirect diff --git a/routes/widget/widget_methods.go b/routes/widget/widget_methods.go index 032becf..98eb40f 100644 --- a/routes/widget/widget_methods.go +++ b/routes/widget/widget_methods.go @@ -80,6 +80,7 @@ func (w *Widget) update(modifiedWidget Widget) error { "Z": modifiedWidget.Z, "IsLocked": modifiedWidget.IsLocked, "CustomProperties": modifiedWidget.CustomProperties, + "SignalIDs": modifiedWidget.SignalIDs, }).Error return err diff --git a/routes/widget/widget_test.go b/routes/widget/widget_test.go index 52a6caa..571d0db 100644 --- a/routes/widget/widget_test.go +++ b/routes/widget/widget_test.go @@ -53,6 +53,7 @@ type WidgetRequest struct { DashboardID uint `json:"dashboardID,omitempty"` IsLocked bool `json:"isLocked,omitempty"` CustomProperties postgres.Jsonb `json:"customProperties,omitempty"` + SignalIDs []int64 `json:"signalIDs,omitempty"` } type DashboardRequest struct { @@ -153,6 +154,7 @@ func TestAddWidget(t *testing.T) { IsLocked: database.WidgetA.IsLocked, CustomProperties: database.WidgetA.CustomProperties, DashboardID: dashboardID, + SignalIDs: database.WidgetA.SignalIDs, } // authenticate as userB who has no access to scenario @@ -253,6 +255,7 @@ func TestUpdateWidget(t *testing.T) { IsLocked: database.WidgetA.IsLocked, CustomProperties: database.WidgetA.CustomProperties, DashboardID: dashboardID, + SignalIDs: database.WidgetA.SignalIDs, } code, resp, err := helper.TestEndpoint(router, token, "/api/widgets", "POST", helper.KeyModels{"widget": newWidget}) @@ -271,6 +274,7 @@ func TestUpdateWidget(t *testing.T) { MinWidth: database.WidgetB.MinWidth, MinHeight: database.WidgetB.MinHeight, CustomProperties: database.WidgetA.CustomProperties, + SignalIDs: database.WidgetB.SignalIDs, } // authenticate as userB who has no access to scenario @@ -363,6 +367,7 @@ func TestDeleteWidget(t *testing.T) { IsLocked: database.WidgetA.IsLocked, CustomProperties: database.WidgetA.CustomProperties, DashboardID: dashboardID, + SignalIDs: database.WidgetA.SignalIDs, } code, resp, err := helper.TestEndpoint(router, token, "/api/widgets", "POST", helper.KeyModels{"widget": newWidget}) @@ -461,6 +466,7 @@ func TestGetAllWidgetsOfDashboard(t *testing.T) { IsLocked: database.WidgetA.IsLocked, CustomProperties: database.WidgetA.CustomProperties, DashboardID: dashboardID, + SignalIDs: database.WidgetA.SignalIDs, } code, resp, err = helper.TestEndpoint(router, token, "/api/widgets", "POST", helper.KeyModels{"widget": newWidgetA}) @@ -480,6 +486,7 @@ func TestGetAllWidgetsOfDashboard(t *testing.T) { IsLocked: database.WidgetB.IsLocked, CustomProperties: database.WidgetB.CustomProperties, DashboardID: dashboardID, + SignalIDs: database.WidgetB.SignalIDs, } code, resp, err = helper.TestEndpoint(router, token, "/api/widgets", "POST", helper.KeyModels{"widget": newWidgetB}) diff --git a/routes/widget/widget_validators.go b/routes/widget/widget_validators.go index a993ad3..a3e4ce2 100644 --- a/routes/widget/widget_validators.go +++ b/routes/widget/widget_validators.go @@ -43,6 +43,7 @@ type validNewWidget struct { DashboardID uint `form:"dashboardID" validate:"required"` IsLocked bool `form:"isLocked" validate:"omitempty"` CustomProperties postgres.Jsonb `form:"customProperties" validate:"omitempty"` + SignalIDs []int64 `form:"signalIDs" validate:"omitempty"` } type validUpdatedWidget struct { @@ -57,6 +58,7 @@ type validUpdatedWidget struct { Z int `form:"z" validate:"omitempty"` IsLocked bool `form:"isLocked" validate:"omitempty"` CustomProperties postgres.Jsonb `form:"customProperties" validate:"omitempty"` + SignalIDs []int64 `form:"signalIDs" validate:"omitempty"` } type addWidgetRequest struct { @@ -94,6 +96,7 @@ func (r *addWidgetRequest) createWidget() Widget { s.IsLocked = r.Widget.IsLocked s.CustomProperties = r.Widget.CustomProperties s.DashboardID = r.Widget.DashboardID + s.SignalIDs = r.Widget.SignalIDs return s } @@ -114,6 +117,7 @@ func (r *updateWidgetRequest) updatedWidget(oldWidget Widget) Widget { s.Y = r.Widget.Y s.Z = r.Widget.Z s.IsLocked = r.Widget.IsLocked + s.SignalIDs = r.Widget.SignalIDs // only update custom props if not empty var emptyJson postgres.Jsonb