diff --git a/lib/Controller/BoardApiController.php b/lib/Controller/BoardApiController.php index 7dcc601c8..68389b307 100644 --- a/lib/Controller/BoardApiController.php +++ b/lib/Controller/BoardApiController.php @@ -60,6 +60,7 @@ class BoardApiController extends ApiController { * @NoCSRFRequired * * Return all of the boards that the current user has access to. + * @throws StatusException */ public function index() { $modified = $this->request->getHeader('If-Modified-Since'); diff --git a/lib/Db/Board.php b/lib/Db/Board.php index fabf39061..ae26fe3ca 100644 --- a/lib/Db/Board.php +++ b/lib/Db/Board.php @@ -34,6 +34,7 @@ class Board extends RelationalEntity { protected $permissions = []; protected $users = []; protected $shared; + protected $stacks = []; protected $deletedAt = 0; protected $lastModified = 0; @@ -48,6 +49,7 @@ class Board extends RelationalEntity { $this->addRelation('shared'); $this->addRelation('users'); $this->addRelation('permissions'); + $this->addRelation('stacks'); $this->addResolvable('owner'); $this->shared = -1; } diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index dd11ad3e4..d39ba969b 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -31,6 +31,7 @@ use OCA\Deck\Db\AssignedUsersMapper; use OCA\Deck\Db\ChangeHelper; use OCA\Deck\Db\IPermissionMapper; use OCA\Deck\Db\Label; +use OCA\Deck\Db\StackMapper; use OCA\Deck\NoPermissionException; use OCA\Deck\Notification\NotificationHelper; use OCP\AppFramework\Db\DoesNotExistException; @@ -46,6 +47,7 @@ use OCA\Deck\BadRequestException; class BoardService { private $boardMapper; + private $stackMapper; private $labelMapper; private $aclMapper; private $l10n; @@ -60,6 +62,7 @@ class BoardService { public function __construct( BoardMapper $boardMapper, + StackMapper $stackMapper, IL10N $l10n, LabelMapper $labelMapper, AclMapper $aclMapper, @@ -73,6 +76,7 @@ class BoardService { $userId ) { $this->boardMapper = $boardMapper; + $this->stackMapper = $stackMapper; $this->labelMapper = $labelMapper; $this->aclMapper = $aclMapper; $this->l10n = $l10n; @@ -89,7 +93,7 @@ class BoardService { /** * @return array */ - public function findAll($since = -1) { + public function findAll($since = 0) { $userInfo = $this->getBoardPrerequisites(); $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null, $since); $groupBoards = $this->boardMapper->findAllByGroups($userInfo['user'], $userInfo['groups'],null, null, $since); @@ -104,6 +108,7 @@ class BoardService { $this->boardMapper->mapAcl($acl); } } + $this->enrichWithStacks($item); $permissions = $this->permissionService->matchPermissions($item); $item->setPermissions([ 'PERMISSION_READ' => $permissions[Acl::PERMISSION_READ], @@ -527,4 +532,14 @@ class BoardService { return $this->aclMapper->delete($acl); } + private function enrichWithStacks($board, $since = -1) { + $stacks = $this->stackMapper->findAll($board->getId(), null, null, $since); + + if(\count($stacks) === 0) { + return; + } + + $board->setStacks($stacks); + } + } diff --git a/tests/unit/Db/BoardTest.php b/tests/unit/Db/BoardTest.php index a151efc7e..2f06a4172 100644 --- a/tests/unit/Db/BoardTest.php +++ b/tests/unit/Db/BoardTest.php @@ -25,6 +25,7 @@ class BoardTest extends TestCase { 'color' => "000000", 'labels' => array(), 'permissions' => [], + 'stacks' => [], 'deletedAt' => 0, 'lastModified' => 0, 'acl' => array(), @@ -43,6 +44,7 @@ class BoardTest extends TestCase { 'color' => "000000", 'labels' => array("foo", "bar"), 'permissions' => [], + 'stacks' => [], 'deletedAt' => 0, 'lastModified' => 0, 'acl' => array(), @@ -68,6 +70,7 @@ class BoardTest extends TestCase { 'color' => "000000", 'labels' => array(), 'permissions' => [], + 'stacks' => [], 'deletedAt' => 0, 'lastModified' => 0, 'acl' => array(), diff --git a/tests/unit/Service/BoardServiceTest.php b/tests/unit/Service/BoardServiceTest.php index b5949bc81..512c663f7 100644 --- a/tests/unit/Service/BoardServiceTest.php +++ b/tests/unit/Service/BoardServiceTest.php @@ -33,6 +33,7 @@ use OCA\Deck\Db\Board; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\ChangeHelper; use OCA\Deck\Db\LabelMapper; +use OCA\Deck\Db\StackMapper; use OCA\Deck\Notification\NotificationHelper; use OCP\IUser; use OCP\IUserManager; @@ -51,6 +52,8 @@ class BoardServiceTest extends TestCase { private $aclMapper; /** @var BoardMapper */ private $boardMapper; + /** @var StackMapper */ + private $stackMapper; /** @var PermissionService */ private $permissionService; /** @var NotificationHelper */ @@ -72,6 +75,7 @@ class BoardServiceTest extends TestCase { $this->l10n = $this->createMock(L10N::class); $this->aclMapper = $this->createMock(AclMapper::class); $this->boardMapper = $this->createMock(BoardMapper::class); + $this->stackMapper = $this->createMock(StackMapper::class); $this->labelMapper = $this->createMock(LabelMapper::class); $this->permissionService = $this->createMock(PermissionService::class); $this->notificationHelper = $this->createMock(NotificationHelper::class); @@ -83,6 +87,7 @@ class BoardServiceTest extends TestCase { $this->service = new BoardService( $this->boardMapper, + $this->stackMapper, $this->l10n, $this->labelMapper, $this->aclMapper, @@ -111,6 +116,9 @@ class BoardServiceTest extends TestCase { ->method('findAllByUser') ->with('admin') ->willReturn([$b1, $b2]); + $this->stackMapper->expects($this->any()) + ->method('findAll') + ->willReturn([]); $this->boardMapper->expects($this->once()) ->method('findAllByGroups') ->with('admin', ['a', 'b', 'c'])