Update Card serialization (jsonSerialize usages) to use CardDetails model

Signed-off-by: Raul <raul@nextcloud.com>
This commit is contained in:
Raul
2022-05-03 12:59:58 +02:00
parent 723ce6c893
commit 7b7af75802
5 changed files with 63 additions and 36 deletions

View File

@@ -27,6 +27,7 @@ use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\StackMapper; use OCA\Deck\Db\StackMapper;
use OCA\Deck\Model\CardDetails;
use OCA\Deck\Service\BoardService; use OCA\Deck\Service\BoardService;
use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\AppFramework\Db\MultipleObjectsReturnedException;
@@ -101,7 +102,9 @@ class UserExport extends Command {
$fullCard = $this->cardMapper->find($card->getId()); $fullCard = $this->cardMapper->find($card->getId());
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId()); $assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
$fullCard->setAssignedUsers($assignedUsers); $fullCard->setAssignedUsers($assignedUsers);
$data[$board->getId()]['stacks'][$stack->getId()]['cards'][] = (array)$fullCard->jsonSerialize();
$cardDetails = new CardDetails($fullCard, $fullBoard);
$data[$board->getId()]['stacks'][$stack->getId()]['cards'][] = $cardDetails->jsonSerialize();
} }
} }
} }

View File

@@ -27,6 +27,7 @@ declare(strict_types=1);
namespace OCA\Deck\Controller; namespace OCA\Deck\Controller;
use OCA\Deck\Db\Card; use OCA\Deck\Db\Card;
use OCA\Deck\Model\CardDetails;
use OCA\Deck\Service\SearchService; use OCA\Deck\Service\SearchService;
use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController; use OCP\AppFramework\OCSController;
@@ -50,9 +51,12 @@ class SearchController extends OCSController {
public function search(string $term, ?int $limit = null, ?int $cursor = null): DataResponse { public function search(string $term, ?int $limit = null, ?int $cursor = null): DataResponse {
$cards = $this->searchService->searchCards($term, $limit, $cursor); $cards = $this->searchService->searchCards($term, $limit, $cursor);
return new DataResponse(array_map(function (Card $card) { return new DataResponse(array_map(function (Card $card) {
$json = $card->jsonSerialize(); $board = $card->getRelatedBoard();
$json = (new CardDetails($card, $board))->jsonSerialize();
$json['relatedBoard'] = $board;
$json['relatedStack'] = $card->getRelatedStack(); $json['relatedStack'] = $card->getRelatedStack();
$json['relatedBoard'] = $card->getRelatedBoard();
return $json; return $json;
}, $cards)); }, $cards));
} }

View File

@@ -226,6 +226,21 @@ class CardMapper extends QBMapper implements IPermissionMapper {
return $this->findEntities($qb); return $this->findEntities($qb);
} }
public function findAllByBoardId(int $boardId, ?int $limit = null, ?int $offset = null): array {
$qb = $this->db->getQueryBuilder();
$qb->select('c.*')
->from('deck_cards', 'c')
->innerJoin('c', 'deck_stacks', 's', 's.id = c.stack_id')
->innerJoin('s', 'deck_boards', 'b', 'b.id = s.board_id')
->where($qb->expr()->eq('board_id', $qb->createNamedParameter($boardId, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('archived', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
->setMaxResults($limit)
->setFirstResult($offset)
->orderBy('c.lastmodified')
->addOrderBy('c.id');
return $this->findEntities($qb);
}
public function findAllWithDue($boardId) { public function findAllWithDue($boardId) {
$qb = $this->db->getQueryBuilder(); $qb = $this->db->getQueryBuilder();
$qb->select('c.*') $qb->select('c.*')

View File

@@ -30,9 +30,9 @@ namespace OCA\Deck\Service;
use OCA\Deck\Db\AssignmentMapper; use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\Card; use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\CardMapper;
use OCA\Deck\Model\CardDetails;
use OCP\Comments\ICommentsManager; use OCP\Comments\ICommentsManager;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCA\Deck\Db\Board;
use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\LabelMapper;
use OCP\IUserManager; use OCP\IUserManager;
@@ -96,42 +96,35 @@ class OverviewService {
$userBoards = $this->findAllBoardsFromUser($userId); $userBoards = $this->findAllBoardsFromUser($userId);
$allDueCards = []; $allDueCards = [];
foreach ($userBoards as $userBoard) { foreach ($userBoards as $userBoard) {
$service = $this; $allDueCards[] = array_map(function ($card) use ($userBoard, $userId) {
$allDueCards[] = array_map(static function ($card) use ($service, $userBoard, $userId) { $this->enrich($card, $userId);
$service->enrich($card, $userId); return (new CardDetails($card, $userBoard))->jsonSerialize();
$cardData = $card->jsonSerialize();
$cardData['boardId'] = $userBoard->getId();
return $cardData;
}, $this->cardMapper->findAllWithDue($userBoard->getId())); }, $this->cardMapper->findAllWithDue($userBoard->getId()));
} }
return $allDueCards; return array_merge(...$allDueCards);
} }
public function findUpcomingCards(string $userId): array { public function findUpcomingCards(string $userId): array {
$userBoards = $this->findAllBoardsFromUser($userId); $userBoards = $this->findAllBoardsFromUser($userId);
$findCards = []; $foundCards = [];
foreach ($userBoards as $userBoard) { foreach ($userBoards as $userBoard) {
$service = $this;
if (count($userBoard->getAcl()) === 0) { if (count($userBoard->getAcl()) === 0) {
// private board: get cards with due date // private board: get cards with due date
$findCards[] = array_map(static function ($card) use ($service, $userBoard, $userId) { $cards = $this->cardMapper->findAllWithDue($userBoard->getId());
$service->enrich($card, $userId);
$cardData = $card->jsonSerialize();
$cardData['boardId'] = $userBoard->getId();
return $cardData;
}, $this->cardMapper->findAllWithDue($userBoard->getId()));
} else { } else {
// shared board: get all my assigned or unassigned cards // shared board: get all my assigned or unassigned cards
$findCards[] = array_map(static function ($card) use ($service, $userBoard, $userId) { $cards = $this->cardMapper->findToMeOrNotAssignedCards($userBoard->getId(), $userId);
$service->enrich($card, $userId);
$cardData = $card->jsonSerialize();
$cardData['boardId'] = $userBoard->getId();
return $cardData;
}, $this->cardMapper->findToMeOrNotAssignedCards($userBoard->getId(), $userId));
} }
$foundCards[] = array_map(
function (Card $card) use ($userBoard, $userId) {
$this->enrich($card, $userId);
return new CardDetails($card, $userBoard);
},
$cards
);
} }
return $findCards; return array_merge(...$foundCards);
} }
// FIXME: This is duplicate code with the board service // FIXME: This is duplicate code with the board service

View File

@@ -30,11 +30,13 @@ use OCA\Deck\BadRequestException;
use OCA\Deck\Db\Acl; use OCA\Deck\Db\Acl;
use OCA\Deck\Db\AssignmentMapper; use OCA\Deck\Db\AssignmentMapper;
use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\Card;
use OCA\Deck\Db\CardMapper; use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\ChangeHelper; use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\Stack; use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper; use OCA\Deck\Db\StackMapper;
use OCA\Deck\Model\CardDetails;
use OCA\Deck\NoPermissionException; use OCA\Deck\NoPermissionException;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
@@ -84,9 +86,13 @@ class StackService {
return; return;
} }
foreach ($cards as $card) { $cards = array_map(
$this->cardService->enrich($card); function (Card $card): CardDetails {
} $this->cardService->enrich($card);
return new CardDetails($card);
},
$cards
);
$stack->setCards($cards); $stack->setCards($cards);
} }
@@ -112,12 +118,18 @@ class StackService {
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_READ); $this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_READ);
$stack = $this->stackMapper->find($stackId); $stack = $this->stackMapper->find($stackId);
$cards = $this->cardMapper->findAll($stackId);
foreach ($cards as $cardIndex => $card) { $cards = array_map(
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId()); function (Card $card): CardDetails {
$card->setAssignedUsers($assignedUsers); $assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
$card->setAttachmentCount($this->attachmentService->count($card->getId())); $card->setAssignedUsers($assignedUsers);
} $card->setAttachmentCount($this->attachmentService->count($card->getId()));
return new CardDetails($card);
},
$this->cardMapper->findAll($stackId)
);
$stack->setCards($cards); $stack->setCards($cards);
return $stack; return $stack;