From 447cb805734fc0c77961796b50641f644c2479b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Sun, 1 Oct 2017 16:03:14 +0200 Subject: [PATCH] Backend: assign/remove user impelementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- appinfo/routes.php | 2 +- lib/Controller/CardController.php | 4 ++-- lib/Db/AssignedUsersMapper.php | 18 ++++++++++++++- lib/Db/Card.php | 2 ++ lib/Db/CardMapper.php | 2 -- lib/Service/CardService.php | 37 ++++++++++++++++++++++++++++--- 6 files changed, 56 insertions(+), 9 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 09f386caa..6d0838d2b 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -57,7 +57,7 @@ return [ ['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'], ['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'], ['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'], - ['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'DELETE'], + ['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign/{userId}', 'verb' => 'DELETE'], // labels ['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'], diff --git a/lib/Controller/CardController.php b/lib/Controller/CardController.php index 4e2b45461..aeadcb6f9 100644 --- a/lib/Controller/CardController.php +++ b/lib/Controller/CardController.php @@ -144,14 +144,14 @@ class CardController extends Controller { * @NoAdminRequired */ public function assignUser($cardId, $userId) { - //$this->cardService->removeLabel($cardId, $labelId); + return $this->cardService->assignUser($cardId, $userId); } /** * @NoAdminRequired */ public function unassignUser($cardId, $userId) { - //$this->cardService->removeLabel($cardId, $labelId); + return $this->cardService->unassignUser($cardId, $userId); } diff --git a/lib/Db/AssignedUsersMapper.php b/lib/Db/AssignedUsersMapper.php index d7d0db6f1..27d79fc67 100644 --- a/lib/Db/AssignedUsersMapper.php +++ b/lib/Db/AssignedUsersMapper.php @@ -25,7 +25,6 @@ namespace OCA\Deck\Db; use OCP\AppFramework\Db\Entity; -use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\IUserManager; @@ -58,7 +57,24 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper { public function findBoardId($cardId) { return $this->cardMapper->findBoardId($cardId); + } + /** + * Check if user exists before assigning it to a card + * + * @param Entity $entity + * @return null|Entity + */ + public function insert(Entity $entity) { + $user = $this->userManager->get($entity->getParticipant()); + if ($user !== null) { + /** @var AssignedUsers $assignment */ + $assignment = parent::insert($entity); + $this->mapParticipant($assignment); + return $assignment; + } else { + return null; + } } public function mapParticipant(AssignedUsers &$assignment) { diff --git a/lib/Db/Card.php b/lib/Db/Card.php index fdcb4d441..63b7b64e1 100644 --- a/lib/Db/Card.php +++ b/lib/Db/Card.php @@ -34,6 +34,7 @@ class Card extends RelationalEntity { protected $lastModified; protected $createdAt; protected $labels; + protected $assignedUsers; protected $owner; protected $order; protected $archived = false; @@ -56,6 +57,7 @@ class Card extends RelationalEntity { $this->addType('archived', 'boolean'); $this->addType('notified', 'boolean'); $this->addRelation('labels'); + $this->addRelation('assignedUsers'); $this->addRelation('participants'); $this->addResolvable('owner'); } diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index 98c73c892..b8f6e3f94 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -24,7 +24,6 @@ namespace OCA\Deck\Db; use OCP\AppFramework\Db\Entity; -use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\IUserManager; use OCP\Notification\IManager; @@ -104,7 +103,6 @@ class CardMapper extends DeckMapper implements IPermissionMapper { $card = $this->findEntity($sql, [$id]); $labels = $this->labelMapper->findAssignedLabelsForCard($card->id); $card->setLabels($labels); - $this->mapOwner($card); return $card; } diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 9ffdbf0ed..f01ddaa32 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -23,10 +23,13 @@ namespace OCA\Deck\Service; +use OCA\Deck\Db\AssignedUsers; +use OCA\Deck\Db\AssignedUsersMapper; use OCA\Deck\Db\Card; use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\Acl; use OCA\Deck\Db\StackMapper; +use OCA\Deck\NotFoundException; use OCA\Deck\StatusException; @@ -36,17 +39,22 @@ class CardService { private $stackMapper; private $permissionService; private $boardService; + private $assignedUsersMapper; - public function __construct(CardMapper $cardMapper, StackMapper $stackMapper, PermissionService $permissionService, BoardService $boardService) { + public function __construct(CardMapper $cardMapper, StackMapper $stackMapper, PermissionService $permissionService, BoardService $boardService, AssignedUsersMapper $assignedUsersMapper) { $this->cardMapper = $cardMapper; $this->stackMapper = $stackMapper; $this->permissionService = $permissionService; $this->boardService = $boardService; + $this->assignedUsersMapper = $assignedUsersMapper; } public function find($cardId) { $this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_READ); - return $this->cardMapper->find($cardId); + $card = $this->cardMapper->find($cardId); + $assignedUsers = $this->assignedUsersMapper->find($card->getId()); + $card->setAssignedUsers($assignedUsers); + return $card; } public function create($title, $stackId, $type, $order, $owner) { @@ -178,4 +186,27 @@ class CardService { } $this->cardMapper->removeLabel($cardId, $labelId); } -} \ No newline at end of file + + public function assignUser($cardId, $userId) { + $assignments = $this->assignedUsersMapper->find($cardId); + foreach ($assignments as $assignment) { + if ($assignment->getParticipant() === $userId) { + return false; + } + } + $assignment = new AssignedUsers(); + $assignment->setCardId($cardId); + $assignment->setParticipant($userId); + return $this->assignedUsersMapper->insert($assignment); + } + + public function unassignUser($cardId, $userId) { + $assignments = $this->assignedUsersMapper->find($cardId); + foreach ($assignments as $assignment) { + if ($assignment->getParticipant() === $userId) { + return $this->assignedUsersMapper->delete($assignment); + } + } + throw new NotFoundException('No assignment for ' . $userId . 'found.'); + } +}