diff --git a/docs/sources/http_api/folder.md b/docs/sources/http_api/folder.md index dc350cf1058..640b5a12ebf 100644 --- a/docs/sources/http_api/folder.md +++ b/docs/sources/http_api/folder.md @@ -154,6 +154,7 @@ Status Codes: - **400** – Errors (invalid json, missing or invalid fields, etc) - **401** – Unauthorized - **403** – Access Denied +- **409** - Folder already exists ## Update folder diff --git a/pkg/api/folder.go b/pkg/api/folder.go index fda9e4fa05e..fabbd7c66bd 100644 --- a/pkg/api/folder.go +++ b/pkg/api/folder.go @@ -147,8 +147,6 @@ func ToFolderErrorResponse(err error) response.Response { } if errors.Is(err, models.ErrFolderTitleEmpty) || - errors.Is(err, models.ErrFolderSameNameExists) || - errors.Is(err, models.ErrFolderWithSameUIDExists) || errors.Is(err, models.ErrDashboardTypeMismatch) || errors.Is(err, models.ErrDashboardInvalidUid) || errors.Is(err, models.ErrDashboardUidTooLong) { @@ -163,6 +161,11 @@ func ToFolderErrorResponse(err error) response.Response { return response.JSON(404, util.DynMap{"status": "not-found", "message": models.ErrFolderNotFound.Error()}) } + if errors.Is(err, models.ErrFolderSameNameExists) || + errors.Is(err, models.ErrFolderWithSameUIDExists) { + return response.Error(409, err.Error(), nil) + } + if errors.Is(err, models.ErrFolderVersionMismatch) { return response.JSON(412, util.DynMap{"status": "version-mismatch", "message": models.ErrFolderVersionMismatch.Error()}) } diff --git a/pkg/api/folder_test.go b/pkg/api/folder_test.go index c83fd8760e5..080ef9b4e72 100644 --- a/pkg/api/folder_test.go +++ b/pkg/api/folder_test.go @@ -46,9 +46,9 @@ func TestFoldersAPIEndpoint(t *testing.T) { Error error ExpectedStatusCode int }{ - {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 409}, {Error: models.ErrFolderTitleEmpty, ExpectedStatusCode: 400}, - {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 409}, {Error: models.ErrDashboardInvalidUid, ExpectedStatusCode: 400}, {Error: models.ErrDashboardUidTooLong, ExpectedStatusCode: 400}, {Error: models.ErrFolderAccessDenied, ExpectedStatusCode: 403}, @@ -102,9 +102,9 @@ func TestFoldersAPIEndpoint(t *testing.T) { Error error ExpectedStatusCode int }{ - {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderWithSameUIDExists, ExpectedStatusCode: 409}, {Error: models.ErrFolderTitleEmpty, ExpectedStatusCode: 400}, - {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 400}, + {Error: models.ErrFolderSameNameExists, ExpectedStatusCode: 409}, {Error: models.ErrDashboardInvalidUid, ExpectedStatusCode: 400}, {Error: models.ErrDashboardUidTooLong, ExpectedStatusCode: 400}, {Error: models.ErrFolderAccessDenied, ExpectedStatusCode: 403},