From 4b6816914221193d4812eafb75d329d230bbd08e Mon Sep 17 00:00:00 2001 From: Paul Tirk Date: Tue, 12 Apr 2022 17:23:07 +0200 Subject: also allow starring/unstarring multiple items by id Signed-off-by: Paul Tirk --- appinfo/routes.php | 4 +- lib/Controller/ItemApiController.php | 52 +++++++++++++++++++++++++ tests/Unit/Controller/ItemApiControllerTest.php | 29 ++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 47329ce7a..10f2b4fb9 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -101,8 +101,8 @@ return ['routes' => [ ['name' => 'item_api#unread_multiple', 'url' => '/api/v1-3/items/unread/multiple', 'verb' => 'POST'], ['name' => 'item_api#star_by_item_id', 'url' => '/api/v1-3/items/{itemId}/star', 'verb' => 'POST'], ['name' => 'item_api#unstar_by_item_id', 'url' => '/api/v1-3/items/{itemId}/unstar', 'verb' => 'POST'], -['name' => 'item_api#star_multiple', 'url' => '/api/v1-3/items/star/multiple', 'verb' => 'POST'], -['name' => 'item_api#unstar_multiple', 'url' => '/api/v1-3/items/unstar/multiple', 'verb' => 'POST'], +['name' => 'item_api#star_multiple_by_item_ids', 'url' => '/api/v1-3/items/star/multiple', 'verb' => 'POST'], +['name' => 'item_api#unstar_multiple_by_item_ids', 'url' => '/api/v1-3/items/unstar/multiple', 'verb' => 'POST'], // API 1.2 ['name' => 'utility_api#version', 'url' => '/api/v1-2/version', 'verb' => 'GET'], diff --git a/lib/Controller/ItemApiController.php b/lib/Controller/ItemApiController.php index 9b8090ef7..baf12adc2 100644 --- a/lib/Controller/ItemApiController.php +++ b/lib/Controller/ItemApiController.php @@ -401,6 +401,28 @@ class ItemApiController extends ApiController } + /** + * @param array $itemIds + * @param bool $isStarred + * + * @return void + */ + private function setMultipleStarredByItemIds(array $itemIds, bool $isStarred): void + { + foreach ($itemIds as $itemId) { + try { + $this->itemService->star( + $this->getUserId(), + $itemId, + $isStarred + ); + } catch (ServiceNotFoundException | ServiceConflictException $ex) { + continue; + } + } + } + + /** * @NoAdminRequired * @@ -433,4 +455,34 @@ class ItemApiController extends ApiController { $this->setMultipleStarred($items, false); } + + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @CORS + * + * @param int[] $items item ids + * + * @return void + */ + public function starMultipleByItemIds(array $itemIds): void + { + $this->setMultipleStarredByItemIds($itemIds, true); + } + + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @CORS + * + * @param array $items item ids + * + * @return void + */ + public function unstarMultipleByItemIds(array $itemIds): void + { + $this->setMultipleStarredByItemIds($itemIds, false); + } } diff --git a/tests/Unit/Controller/ItemApiControllerTest.php b/tests/Unit/Controller/ItemApiControllerTest.php index 749bb2d98..400c4fc32 100644 --- a/tests/Unit/Controller/ItemApiControllerTest.php +++ b/tests/Unit/Controller/ItemApiControllerTest.php @@ -517,4 +517,33 @@ class ItemApiControllerTest extends TestCase $this->class->unstarByItemId(123); } + + + public function testStarMultipleByItemIds() + { + $ids = [ 345, 678 ]; + + $this->itemService->expects($this->exactly(2)) + ->method('star') + ->withConsecutive( + [$this->user->getUID(), 345, true], + [$this->user->getUID(), 678, true] + ); + $this->class->starMultipleByItemIds($ids); + } + + + public function testUnstarMultipleByItemIds() + { + $ids = [ 345, 678 ]; + + $this->itemService->expects($this->exactly(2)) + ->method('star') + ->withConsecutive( + [$this->user->getUID(), 345, false], + [$this->user->getUID(), 678, false] + ); + + $this->class->unstarMultipleByItemIds($ids); + } } -- cgit v1.2.3