Backend: assign/remove user impelementation

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2017-10-01 16:03:14 +02:00
committed by Julius Härtl
parent 01f11d1be9
commit 447cb80573
6 changed files with 56 additions and 9 deletions

View File

@@ -57,7 +57,7 @@ return [
['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'], ['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'],
['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'], ['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'],
['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'], ['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 // labels
['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'], ['name' => 'label#create', 'url' => '/labels', 'verb' => 'POST'],

View File

@@ -144,14 +144,14 @@ class CardController extends Controller {
* @NoAdminRequired * @NoAdminRequired
*/ */
public function assignUser($cardId, $userId) { public function assignUser($cardId, $userId) {
//$this->cardService->removeLabel($cardId, $labelId); return $this->cardService->assignUser($cardId, $userId);
} }
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function unassignUser($cardId, $userId) { public function unassignUser($cardId, $userId) {
//$this->cardService->removeLabel($cardId, $labelId); return $this->cardService->unassignUser($cardId, $userId);
} }

View File

@@ -25,7 +25,6 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\Entity;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IUserManager; use OCP\IUserManager;
@@ -58,7 +57,24 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper {
public function findBoardId($cardId) { public function findBoardId($cardId) {
return $this->cardMapper->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) { public function mapParticipant(AssignedUsers &$assignment) {

View File

@@ -34,6 +34,7 @@ class Card extends RelationalEntity {
protected $lastModified; protected $lastModified;
protected $createdAt; protected $createdAt;
protected $labels; protected $labels;
protected $assignedUsers;
protected $owner; protected $owner;
protected $order; protected $order;
protected $archived = false; protected $archived = false;
@@ -56,6 +57,7 @@ class Card extends RelationalEntity {
$this->addType('archived', 'boolean'); $this->addType('archived', 'boolean');
$this->addType('notified', 'boolean'); $this->addType('notified', 'boolean');
$this->addRelation('labels'); $this->addRelation('labels');
$this->addRelation('assignedUsers');
$this->addRelation('participants'); $this->addRelation('participants');
$this->addResolvable('owner'); $this->addResolvable('owner');
} }

View File

@@ -24,7 +24,6 @@
namespace OCA\Deck\Db; namespace OCA\Deck\Db;
use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\Entity;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\Notification\IManager; use OCP\Notification\IManager;
@@ -104,7 +103,6 @@ class CardMapper extends DeckMapper implements IPermissionMapper {
$card = $this->findEntity($sql, [$id]); $card = $this->findEntity($sql, [$id]);
$labels = $this->labelMapper->findAssignedLabelsForCard($card->id); $labels = $this->labelMapper->findAssignedLabelsForCard($card->id);
$card->setLabels($labels); $card->setLabels($labels);
$this->mapOwner($card); $this->mapOwner($card);
return $card; return $card;
} }

View File

@@ -23,10 +23,13 @@
namespace OCA\Deck\Service; namespace OCA\Deck\Service;
use OCA\Deck\Db\AssignedUsers;
use OCA\Deck\Db\AssignedUsersMapper;
use OCA\Deck\Db\Card; use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\Acl; use OCA\Deck\Db\Acl;
use OCA\Deck\Db\StackMapper; use OCA\Deck\Db\StackMapper;
use OCA\Deck\NotFoundException;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
@@ -36,17 +39,22 @@ class CardService {
private $stackMapper; private $stackMapper;
private $permissionService; private $permissionService;
private $boardService; 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->cardMapper = $cardMapper;
$this->stackMapper = $stackMapper; $this->stackMapper = $stackMapper;
$this->permissionService = $permissionService; $this->permissionService = $permissionService;
$this->boardService = $boardService; $this->boardService = $boardService;
$this->assignedUsersMapper = $assignedUsersMapper;
} }
public function find($cardId) { public function find($cardId) {
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_READ); $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) { public function create($title, $stackId, $type, $order, $owner) {
@@ -178,4 +186,27 @@ class CardService {
} }
$this->cardMapper->removeLabel($cardId, $labelId); $this->cardMapper->removeLabel($cardId, $labelId);
} }
}
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.');
}
}