summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprovokateurin <kate@provokateurin.de>2024-05-05 08:19:37 +0200
committerprovokateurin <kate@provokateurin.de>2024-05-05 08:28:41 +0200
commit823e8017c74afddf17d162bcb9552e71044d6b78 (patch)
tree48f812098609e10b09dc7171de75136075331359
parent35252b9caf88ba46fa8821eb41c8a557170851d8 (diff)
refactor(dashboard): Use attributes for routingfeat/dashboard/expose-layout-statuses-apis
Signed-off-by: provokateurin <kate@provokateurin.de>
-rw-r--r--apps/dashboard/appinfo/routes.php41
-rw-r--r--apps/dashboard/lib/Controller/DashboardApiController.php8
-rw-r--r--apps/dashboard/lib/Controller/DashboardController.php2
-rw-r--r--apps/dashboard/openapi.json98
4 files changed, 59 insertions, 90 deletions
diff --git a/apps/dashboard/appinfo/routes.php b/apps/dashboard/appinfo/routes.php
deleted file mode 100644
index 6fcc9209741..00000000000
--- a/apps/dashboard/appinfo/routes.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
- *
- * @author Julien Veyssier <eneiluj@posteo.net>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Richard Steinmetz <richard@steinmetz.cloud>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-return [
- 'routes' => [
- ['name' => 'dashboard#index', 'url' => '/', 'verb' => 'GET'],
- ],
- 'ocs' => [
- ['name' => 'dashboardApi#getWidgets', 'url' => '/api/v1/widgets', 'verb' => 'GET'],
- ['name' => 'dashboardApi#getWidgetItems', 'url' => '/api/v1/widget-items', 'verb' => 'GET'],
- ['name' => 'dashboardApi#getWidgetItemsV2', 'url' => '/api/v2/widget-items', 'verb' => 'GET'],
- ['name' => 'dashboardApi#getLayout', 'url' => '/api/v3/layout', 'verb' => 'GET'],
- ['name' => 'dashboardApi#updateLayout', 'url' => '/api/v3/layout', 'verb' => 'POST'],
- ['name' => 'dashboardApi#getStatuses', 'url' => '/api/v3/statuses', 'verb' => 'GET'],
- ['name' => 'dashboardApi#updateStatuses', 'url' => '/api/v3/statuses', 'verb' => 'POST'],
- ]
-];
diff --git a/apps/dashboard/lib/Controller/DashboardApiController.php b/apps/dashboard/lib/Controller/DashboardApiController.php
index bd7cb402600..b6ebb4625b5 100644
--- a/apps/dashboard/lib/Controller/DashboardApiController.php
+++ b/apps/dashboard/lib/Controller/DashboardApiController.php
@@ -31,6 +31,7 @@ namespace OCA\Dashboard\Controller;
use OCA\Dashboard\ResponseDefinitions;
use OCA\Dashboard\Service\DashboardService;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Dashboard\IAPIWidget;
@@ -98,6 +99,7 @@ class DashboardApiController extends OCSController {
*
* 200: Widget items returned
*/
+ #[ApiRoute(verb: 'GET', url: '/api/v1/widget-items')]
public function getWidgetItems(array $sinceIds = [], int $limit = 7, array $widgets = []): DataResponse {
$items = [];
$widgets = $this->getShownWidgets($widgets);
@@ -126,6 +128,7 @@ class DashboardApiController extends OCSController {
*
* 200: Widget items returned
*/
+ #[ApiRoute(verb: 'GET', url: '/api/v2/widget-items')]
public function getWidgetItemsV2(array $sinceIds = [], int $limit = 7, array $widgets = []): DataResponse {
$items = [];
$widgets = $this->getShownWidgets($widgets);
@@ -150,6 +153,7 @@ class DashboardApiController extends OCSController {
*
* 200: Widgets returned
*/
+ #[ApiRoute(verb: 'GET', url: '/api/v1/widgets')]
public function getWidgets(): DataResponse {
$widgets = $this->dashboardManager->getWidgets();
@@ -200,6 +204,7 @@ class DashboardApiController extends OCSController {
*
* 200: Layout returned
*/
+ #[ApiRoute(verb: 'GET', url: '/api/v3/layout')]
public function getLayout(): DataResponse {
return new DataResponse(['layout' => $this->service->getLayout()]);
}
@@ -213,6 +218,7 @@ class DashboardApiController extends OCSController {
*
* 200: Statuses updated successfully
*/
+ #[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
public function updateLayout(array $layout): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'layout', implode(',', $layout));
return new DataResponse(['layout' => $layout]);
@@ -226,6 +232,7 @@ class DashboardApiController extends OCSController {
*
* 200: Statuses returned
*/
+ #[ApiRoute(verb: 'GET', url: '/api/v3/statuses')]
public function getStatuses(): DataResponse {
return new DataResponse(['statuses' => $this->service->getStatuses()]);
}
@@ -239,6 +246,7 @@ class DashboardApiController extends OCSController {
*
* 200: Statuses updated successfully
*/
+ #[ApiRoute(verb: 'POST', url: '/api/v3/statuses')]
public function updateStatuses(array $statuses): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
return new DataResponse(['statuses' => $statuses]);
diff --git a/apps/dashboard/lib/Controller/DashboardController.php b/apps/dashboard/lib/Controller/DashboardController.php
index 8375858cbee..f07fd4938d3 100644
--- a/apps/dashboard/lib/Controller/DashboardController.php
+++ b/apps/dashboard/lib/Controller/DashboardController.php
@@ -33,6 +33,7 @@ namespace OCA\Dashboard\Controller;
use OCA\Dashboard\Service\DashboardService;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
@@ -65,6 +66,7 @@ class DashboardController extends Controller {
* @NoAdminRequired
* @return TemplateResponse
*/
+ #[FrontpageRoute(verb: 'GET', url: '/')]
public function index(): TemplateResponse {
\OCP\Util::addStyle('dashboard', 'dashboard');
\OCP\Util::addScript('dashboard', 'main', 'theming');
diff --git a/apps/dashboard/openapi.json b/apps/dashboard/openapi.json
index 7c537b4604c..c317611ab27 100644
--- a/apps/dashboard/openapi.json
+++ b/apps/dashboard/openapi.json
@@ -172,10 +172,10 @@
}
},
"paths": {
- "/ocs/v2.php/apps/dashboard/api/v1/widgets": {
+ "/ocs/v2.php/apps/dashboard/api/v1/widget-items": {
"get": {
- "operationId": "dashboard_api-get-widgets",
- "summary": "Get the widgets",
+ "operationId": "dashboard_api-get-widget-items",
+ "summary": "Get the items for the widgets",
"tags": [
"dashboard_api"
],
@@ -189,6 +189,38 @@
],
"parameters": [
{
+ "name": "sinceIds",
+ "in": "query",
+ "description": "Array indexed by widget Ids, contains date/id from which we want the new items",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Limit number of result items per widget",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 7,
+ "minimum": 1,
+ "maximum": 30
+ }
+ },
+ {
+ "name": "widgets[]",
+ "in": "query",
+ "description": "Limit results to specific widgets",
+ "schema": {
+ "type": "array",
+ "default": [],
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -201,7 +233,7 @@
],
"responses": {
"200": {
- "description": "Widgets returned",
+ "description": "Widget items returned",
"content": {
"application/json": {
"schema": {
@@ -223,7 +255,10 @@
"data": {
"type": "object",
"additionalProperties": {
- "$ref": "#/components/schemas/Widget"
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/WidgetItem"
+ }
}
}
}
@@ -236,9 +271,9 @@
}
}
},
- "/ocs/v2.php/apps/dashboard/api/v1/widget-items": {
+ "/ocs/v2.php/apps/dashboard/api/v2/widget-items": {
"get": {
- "operationId": "dashboard_api-get-widget-items",
+ "operationId": "dashboard_api-get-widget-items-v2",
"summary": "Get the items for the widgets",
"tags": [
"dashboard_api"
@@ -263,7 +298,7 @@
{
"name": "limit",
"in": "query",
- "description": "Limit number of result items per widget",
+ "description": "Limit number of result items per widget, not more than 30 are allowed",
"schema": {
"type": "integer",
"format": "int64",
@@ -319,10 +354,7 @@
"data": {
"type": "object",
"additionalProperties": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/WidgetItem"
- }
+ "$ref": "#/components/schemas/WidgetItems"
}
}
}
@@ -335,10 +367,10 @@
}
}
},
- "/ocs/v2.php/apps/dashboard/api/v2/widget-items": {
+ "/ocs/v2.php/apps/dashboard/api/v1/widgets": {
"get": {
- "operationId": "dashboard_api-get-widget-items-v2",
- "summary": "Get the items for the widgets",
+ "operationId": "dashboard_api-get-widgets",
+ "summary": "Get the widgets",
"tags": [
"dashboard_api"
],
@@ -352,38 +384,6 @@
],
"parameters": [
{
- "name": "sinceIds",
- "in": "query",
- "description": "Array indexed by widget Ids, contains date/id from which we want the new items",
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "limit",
- "in": "query",
- "description": "Limit number of result items per widget, not more than 30 are allowed",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 7,
- "minimum": 1,
- "maximum": 30
- }
- },
- {
- "name": "widgets[]",
- "in": "query",
- "description": "Limit results to specific widgets",
- "schema": {
- "type": "array",
- "default": [],
- "items": {
- "type": "string"
- }
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -396,7 +396,7 @@
],
"responses": {
"200": {