diff --git a/apps/dashboard/appinfo/routes.php b/apps/dashboard/appinfo/routes.php deleted file mode 100644 index 6fcc92097416a..0000000000000 --- a/apps/dashboard/appinfo/routes.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * @author Julien Veyssier - * @author Julius Härtl - * @author Richard Steinmetz - * - * @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 . - * - */ -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 bd7cb40260094..b6ebb4625b5a0 100644 --- a/apps/dashboard/lib/Controller/DashboardApiController.php +++ b/apps/dashboard/lib/Controller/DashboardApiController.php @@ -31,6 +31,7 @@ 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 @@ static function (IWidget $widget) use ($widgetIds) { * * 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 @@ public function getWidgetItems(array $sinceIds = [], int $limit = 7, array $widg * * 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 @@ public function getWidgetItemsV2(array $sinceIds = [], int $limit = 7, array $wi * * 200: Widgets returned */ + #[ApiRoute(verb: 'GET', url: '/api/v1/widgets')] public function getWidgets(): DataResponse { $widgets = $this->dashboardManager->getWidgets(); @@ -200,6 +204,7 @@ public function getWidgets(): DataResponse { * * 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 @@ public function getLayout(): DataResponse { * * 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 @@ public function updateLayout(array $layout): DataResponse { * * 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 @@ public function getStatuses(): DataResponse { * * 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 8375858cbee1c..f07fd4938d31a 100644 --- a/apps/dashboard/lib/Controller/DashboardController.php +++ b/apps/dashboard/lib/Controller/DashboardController.php @@ -33,6 +33,7 @@ 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 @@ public function __construct( * @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 7c537b4604cab..c317611ab27bb 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" ], @@ -188,6 +188,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", @@ -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" ], @@ -351,38 +383,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", @@ -396,7 +396,7 @@ ], "responses": { "200": { - "description": "Widget items returned", + "description": "Widgets returned", "content": { "application/json": { "schema": { @@ -418,7 +418,7 @@ "data": { "type": "object", "additionalProperties": { - "$ref": "#/components/schemas/WidgetItems" + "$ref": "#/components/schemas/Widget" } } }