mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: add Folderuid into panel-library API (#48577)
* add folderuid into interface * panellibrary id/uid things * modify doc * update doc * correct some comments
This commit is contained in:
parent
60cabaea0a
commit
0d14c27eb9
@ -269,7 +269,8 @@ Creates a new library element.
|
||||
|
||||
JSON Body schema:
|
||||
|
||||
- **folderId** – Optional, the ID of the folder where the library element is stored.
|
||||
- **folderId** – ID of the folder where the library element is stored. It is deprecated since Grafana v9
|
||||
- **folderUid** – Optional, the UID of the folder where the library element is stored, empty string when it is General folder
|
||||
- **name** – Optional, the name of the library element.
|
||||
- **model** – The JSON model for the library element.
|
||||
- **kind** – Kind of element to create, Use `1` for library panels or `2` for library variables.
|
||||
@ -285,7 +286,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||||
|
||||
{
|
||||
"uid": "nErXDvCkzz",
|
||||
"folderId": 0,
|
||||
"folderUid": "",
|
||||
"name": "Example library panel",
|
||||
"model": {...},
|
||||
"kind": 1
|
||||
@ -303,6 +304,7 @@ Content-Type: application/json
|
||||
"id": 28,
|
||||
"orgId": 1,
|
||||
"folderId": 0,
|
||||
"folderUid": "",
|
||||
"uid": "nErXDvCkzz",
|
||||
"name": "Example library panel",
|
||||
"kind": 1,
|
||||
@ -346,7 +348,8 @@ Updates an existing library element identified by uid.
|
||||
|
||||
JSON Body schema:
|
||||
|
||||
- **folderId** – ID of the folder where the library element is stored.
|
||||
- **folderId** – ID of the folder where the library element is stored. It is deprecated since Grafana v9
|
||||
- **folderUid** – UID of the folder where the library element is stored, empty string when it is General folder.
|
||||
- **name** – Name of the library element.
|
||||
- **model** – The JSON model for the library element.
|
||||
- **kind** – Kind of element to create. Use `1` for library panels or `2` for library variables.
|
||||
@ -379,6 +382,7 @@ Content-Type: application/json
|
||||
"id": 28,
|
||||
"orgId": 1,
|
||||
"folderId": 0,
|
||||
"folderUid": "",
|
||||
"uid": "nErXDvCkzz",
|
||||
"name": "Renamed library panel",
|
||||
"kind": 1,
|
||||
|
@ -30,11 +30,33 @@ func (l *LibraryElementService) createHandler(c *models.ReqContext) response.Res
|
||||
return response.Error(http.StatusBadRequest, "bad request data", err)
|
||||
}
|
||||
|
||||
if cmd.FolderUID != nil {
|
||||
if *cmd.FolderUID == "" {
|
||||
cmd.FolderID = 0
|
||||
} else {
|
||||
folder, err := l.folderService.GetFolderByUID(c.Req.Context(), c.SignedInUser, c.OrgId, *cmd.FolderUID)
|
||||
if err != nil || folder == nil {
|
||||
return response.Error(http.StatusBadRequest, "failed to get folder", err)
|
||||
}
|
||||
cmd.FolderID = folder.Id
|
||||
}
|
||||
}
|
||||
|
||||
element, err := l.createLibraryElement(c.Req.Context(), c.SignedInUser, cmd)
|
||||
if err != nil {
|
||||
return toLibraryElementError(err, "Failed to create library element")
|
||||
}
|
||||
|
||||
if element.FolderID != 0 {
|
||||
folder, err := l.folderService.GetFolderByID(c.Req.Context(), c.SignedInUser, element.FolderID, c.OrgId)
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "failed to get folder", err)
|
||||
}
|
||||
element.FolderUID = folder.Uid
|
||||
element.Meta.FolderUID = folder.Uid
|
||||
element.Meta.FolderName = folder.Title
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, LibraryElementResponse{Result: element})
|
||||
}
|
||||
|
||||
@ -88,11 +110,33 @@ func (l *LibraryElementService) patchHandler(c *models.ReqContext) response.Resp
|
||||
return response.Error(http.StatusBadRequest, "bad request data", err)
|
||||
}
|
||||
|
||||
if cmd.FolderUID != nil {
|
||||
if *cmd.FolderUID == "" {
|
||||
cmd.FolderID = 0
|
||||
} else {
|
||||
folder, err := l.folderService.GetFolderByUID(c.Req.Context(), c.SignedInUser, c.OrgId, *cmd.FolderUID)
|
||||
if err != nil || folder == nil {
|
||||
return response.Error(http.StatusBadRequest, "failed to get folder", err)
|
||||
}
|
||||
cmd.FolderID = folder.Id
|
||||
}
|
||||
}
|
||||
|
||||
element, err := l.patchLibraryElement(c.Req.Context(), c.SignedInUser, cmd, web.Params(c.Req)[":uid"])
|
||||
if err != nil {
|
||||
return toLibraryElementError(err, "Failed to update library element")
|
||||
}
|
||||
|
||||
if element.FolderID != 0 {
|
||||
folder, err := l.folderService.GetFolderByID(c.Req.Context(), c.SignedInUser, element.FolderID, c.OrgId)
|
||||
if err != nil {
|
||||
return response.Error(http.StatusInternalServerError, "failed to get folder", err)
|
||||
}
|
||||
element.FolderUID = folder.Uid
|
||||
element.Meta.FolderUID = folder.Uid
|
||||
element.Meta.FolderName = folder.Title
|
||||
}
|
||||
|
||||
return response.JSON(http.StatusOK, LibraryElementResponse{Result: element})
|
||||
}
|
||||
|
||||
|
@ -245,6 +245,7 @@ func getLibraryElements(c context.Context, store *sqlstore.SQLStore, signedInUse
|
||||
ID: libraryElement.ID,
|
||||
OrgID: libraryElement.OrgID,
|
||||
FolderID: libraryElement.FolderID,
|
||||
FolderUID: libraryElement.FolderUID,
|
||||
UID: libraryElement.UID,
|
||||
Name: libraryElement.Name,
|
||||
Kind: libraryElement.Kind,
|
||||
@ -357,6 +358,7 @@ func (l *LibraryElementService) getAllLibraryElements(c context.Context, signedI
|
||||
ID: element.ID,
|
||||
OrgID: element.OrgID,
|
||||
FolderID: element.FolderID,
|
||||
FolderUID: element.FolderUID,
|
||||
UID: element.UID,
|
||||
Name: element.Name,
|
||||
Kind: element.Kind,
|
||||
@ -530,7 +532,6 @@ func (l *LibraryElementService) patchLibraryElement(c context.Context, signedInU
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
|
@ -40,6 +40,8 @@ func TestCreateLibraryElement(t *testing.T) {
|
||||
},
|
||||
Version: 1,
|
||||
Meta: LibraryElementDTOMeta{
|
||||
FolderName: "ScenarioFolder",
|
||||
FolderUID: "ScenarioFolder",
|
||||
ConnectedDashboards: 0,
|
||||
Created: sc.initialResult.Result.Meta.Created,
|
||||
Updated: sc.initialResult.Result.Meta.Updated,
|
||||
@ -87,6 +89,8 @@ func TestCreateLibraryElement(t *testing.T) {
|
||||
},
|
||||
Version: 1,
|
||||
Meta: LibraryElementDTOMeta{
|
||||
FolderName: "ScenarioFolder",
|
||||
FolderUID: "ScenarioFolder",
|
||||
ConnectedDashboards: 0,
|
||||
Created: result.Result.Meta.Created,
|
||||
Updated: result.Result.Meta.Updated,
|
||||
@ -160,6 +164,8 @@ func TestCreateLibraryElement(t *testing.T) {
|
||||
},
|
||||
Version: 1,
|
||||
Meta: LibraryElementDTOMeta{
|
||||
FolderName: "ScenarioFolder",
|
||||
FolderUID: "ScenarioFolder",
|
||||
ConnectedDashboards: 0,
|
||||
Created: result.Result.Meta.Created,
|
||||
Updated: result.Result.Meta.Updated,
|
||||
|
@ -63,6 +63,8 @@ func TestPatchLibraryElement(t *testing.T) {
|
||||
},
|
||||
Version: 2,
|
||||
Meta: LibraryElementDTOMeta{
|
||||
FolderName: "NewFolder",
|
||||
FolderUID: "NewFolder",
|
||||
ConnectedDashboards: 0,
|
||||
Created: sc.initialResult.Result.Meta.Created,
|
||||
Updated: result.Result.Meta.Updated,
|
||||
@ -102,6 +104,8 @@ func TestPatchLibraryElement(t *testing.T) {
|
||||
sc.initialResult.Result.Meta.CreatedBy.AvatarURL = userInDbAvatar
|
||||
sc.initialResult.Result.Meta.Updated = result.Result.Meta.Updated
|
||||
sc.initialResult.Result.Version = 2
|
||||
sc.initialResult.Result.Meta.FolderName = "NewFolder"
|
||||
sc.initialResult.Result.Meta.FolderUID = "NewFolder"
|
||||
if diff := cmp.Diff(sc.initialResult.Result, result.Result, getCompareOptions()...); diff != "" {
|
||||
t.Fatalf("Result mismatch (-want +got):\n%s", diff)
|
||||
}
|
||||
|
@ -64,6 +64,7 @@ type LibraryElementDTO struct {
|
||||
ID int64 `json:"id"`
|
||||
OrgID int64 `json:"orgId"`
|
||||
FolderID int64 `json:"folderId"`
|
||||
FolderUID string `json:"folderUid"`
|
||||
UID string `json:"uid"`
|
||||
Name string `json:"name"`
|
||||
Kind int64 `json:"kind"`
|
||||
@ -162,6 +163,8 @@ var (
|
||||
type CreateLibraryElementCommand struct {
|
||||
// ID of the folder where the library element is stored.
|
||||
FolderID int64 `json:"folderId"`
|
||||
// UID of the folder where the library element is stored.
|
||||
FolderUID *string `json:"folderUid"`
|
||||
// Name of the library element.
|
||||
Name string `json:"name"`
|
||||
// The JSON model for the library element.
|
||||
@ -181,6 +184,8 @@ type CreateLibraryElementCommand struct {
|
||||
type PatchLibraryElementCommand struct {
|
||||
// ID of the folder where the library element is stored.
|
||||
FolderID int64 `json:"folderId" binding:"Default(-1)"`
|
||||
// UID of the folder where the library element is stored.
|
||||
FolderUID *string `json:"folderUid"`
|
||||
// Name of the library element.
|
||||
Name string `json:"name"`
|
||||
// The JSON model for the library element.
|
||||
|
@ -506,14 +506,6 @@
|
||||
"summary": "Add a user role assignment.",
|
||||
"operationId": "addUserRole",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"x-go-name": "Body",
|
||||
"name": "body",
|
||||
@ -522,6 +514,14 @@
|
||||
"schema": {
|
||||
"$ref": "#/definitions/AddUserRoleCommand"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -547,14 +547,6 @@
|
||||
"summary": "Remove a user role assignment.",
|
||||
"operationId": "removeUserRole",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"x-go-name": "RoleUID",
|
||||
@ -568,6 +560,14 @@
|
||||
"description": "A flag indicating if the assignment is global or not. If set to false, the default org ID of the authenticated user will be used from the request to remove assignment.",
|
||||
"name": "global",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -8261,6 +8261,14 @@
|
||||
"summary": "Add External Group.",
|
||||
"operationId": "addTeamGroupApi",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"x-go-name": "Body",
|
||||
"name": "body",
|
||||
@ -8269,14 +8277,6 @@
|
||||
"schema": {
|
||||
"$ref": "#/definitions/TeamGroupMapping"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -8310,16 +8310,16 @@
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "GroupID",
|
||||
"name": "groupId",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"x-go-name": "GroupID",
|
||||
"name": "groupId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
@ -10919,6 +10919,11 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"description": "UID of the folder where the library element is stored.",
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"kind": {
|
||||
"description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables",
|
||||
"type": "integer",
|
||||
@ -13326,6 +13331,10 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
@ -13638,7 +13647,7 @@
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"x-go-name": "ID"
|
||||
"x-go-name": "Id"
|
||||
},
|
||||
"target": {
|
||||
"type": "string",
|
||||
@ -13653,7 +13662,7 @@
|
||||
"x-go-name": "Url"
|
||||
}
|
||||
},
|
||||
"x-go-package": "github.com/grafana/grafana/pkg/services/preference"
|
||||
"x-go-package": "github.com/grafana/grafana/pkg/models"
|
||||
},
|
||||
"NavbarPreference": {
|
||||
"type": "object",
|
||||
@ -14113,6 +14122,11 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"description": "UID of the folder where the library element is stored.",
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"kind": {
|
||||
"description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables",
|
||||
"type": "integer",
|
||||
|
@ -506,14 +506,6 @@
|
||||
"summary": "Add a user role assignment.",
|
||||
"operationId": "addUserRole",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"x-go-name": "Body",
|
||||
"name": "body",
|
||||
@ -522,6 +514,14 @@
|
||||
"schema": {
|
||||
"$ref": "#/definitions/AddUserRoleCommand"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -547,14 +547,6 @@
|
||||
"summary": "Remove a user role assignment.",
|
||||
"operationId": "removeUserRole",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"x-go-name": "RoleUID",
|
||||
@ -568,6 +560,14 @@
|
||||
"description": "A flag indicating if the assignment is global or not. If set to false, the default org ID of the authenticated user will be used from the request to remove assignment.",
|
||||
"name": "global",
|
||||
"in": "query"
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "UserID",
|
||||
"name": "user_id",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -6670,6 +6670,14 @@
|
||||
"summary": "Add External Group.",
|
||||
"operationId": "addTeamGroupApi",
|
||||
"parameters": [
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"x-go-name": "Body",
|
||||
"name": "body",
|
||||
@ -6678,14 +6686,6 @@
|
||||
"schema": {
|
||||
"$ref": "#/definitions/TeamGroupMapping"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@ -6719,16 +6719,16 @@
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "GroupID",
|
||||
"name": "groupId",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"x-go-name": "TeamID",
|
||||
"name": "teamId",
|
||||
"x-go-name": "GroupID",
|
||||
"name": "groupId",
|
||||
"in": "path",
|
||||
"required": true
|
||||
}
|
||||
@ -8906,6 +8906,11 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"description": "UID of the folder where the library element is stored.",
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"kind": {
|
||||
"description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables",
|
||||
"type": "integer",
|
||||
@ -10493,6 +10498,10 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"id": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
@ -10721,7 +10730,7 @@
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"x-go-name": "ID"
|
||||
"x-go-name": "Id"
|
||||
},
|
||||
"target": {
|
||||
"type": "string",
|
||||
@ -10736,7 +10745,7 @@
|
||||
"x-go-name": "Url"
|
||||
}
|
||||
},
|
||||
"x-go-package": "github.com/grafana/grafana/pkg/services/preference"
|
||||
"x-go-package": "github.com/grafana/grafana/pkg/models"
|
||||
},
|
||||
"NavbarPreference": {
|
||||
"type": "object",
|
||||
@ -10938,6 +10947,11 @@
|
||||
"format": "int64",
|
||||
"x-go-name": "FolderID"
|
||||
},
|
||||
"folderUID": {
|
||||
"description": "UID of the folder where the library element is stored.",
|
||||
"type": "string",
|
||||
"x-go-name": "FolderUID"
|
||||
},
|
||||
"kind": {
|
||||
"description": "Kind of element to create, Use 1 for library panels or 2 for c.\nDescription:\n1 - library panels\n2 - library variables",
|
||||
"type": "integer",
|
||||
|
Loading…
Reference in New Issue
Block a user