diff --git a/pkg/services/dashboards/database/database.go b/pkg/services/dashboards/database/database.go index 06c0c1a0550..33d9109257d 100644 --- a/pkg/services/dashboards/database/database.go +++ b/pkg/services/dashboards/database/database.go @@ -400,6 +400,20 @@ func saveDashboard(sess *db.Session, cmd *dashboards.SaveDashboardCommand, emitE userId = -1 } + // we don't save FolderID in kubernetes object when saving through k8s + // this block guarantees we save dashboards with folder_id and folder_uid in those cases + if !dash.IsFolder && dash.FolderUID != "" && dash.FolderID == 0 { // nolint:staticcheck + var existing dashboards.Dashboard + folderIdFound, err := sess.Where("uid=? AND org_id=?", dash.FolderUID, dash.OrgID).Get(&existing) + if err != nil { + return nil, err + } + + if folderIdFound { + dash.FolderID = existing.ID // nolint:staticcheck + } + } + if dash.ID > 0 { var existing dashboards.Dashboard dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.ID, dash.OrgID).Get(&existing) diff --git a/pkg/services/dashboards/database/database_test.go b/pkg/services/dashboards/database/database_test.go index ccb0aac838b..9849cc80691 100644 --- a/pkg/services/dashboards/database/database_test.go +++ b/pkg/services/dashboards/database/database_test.go @@ -378,6 +378,23 @@ func TestIntegrationDashboardDataAccess(t *testing.T) { require.False(t, dashboard.Updated.IsZero()) }) + t.Run("Should populate FolderID if FolderUID is provided when creating a dashboard", func(t *testing.T) { + setup() + cmd := dashboards.SaveDashboardCommand{ + OrgID: 1, + Dashboard: simplejson.NewFromAny(map[string]interface{}{ + "title": "folderId", + "tags": []interface{}{}, + }), + FolderUID: savedFolder.UID, + UserID: 100, + } + dashboard, err := dashboardStore.SaveDashboard(context.Background(), cmd) + require.NoError(t, err) + require.EqualValues(t, dashboard.FolderID, savedFolder.ID) //nolint:staticcheck + require.EqualValues(t, dashboard.FolderUID, savedFolder.UID) + }) + t.Run("Should be able to update dashboard by id and remove folderId", func(t *testing.T) { setup() cmd := dashboards.SaveDashboardCommand{