Compare commits

...

6 Commits

Author SHA1 Message Date
Carl Schwan
ce5faf05ab perf(stack): Optimize fetching all cards from a stack
- Don't fetch stack, if we already know it
- fetch all comments at the same time, instead of for each card

Signed-off-by: Carl Schwan <carl.schwan@nextclound.com>
2025-08-13 14:54:30 +02:00
Nextcloud bot
0ed8b21b3c fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-12 00:29:18 +00:00
github-actions[bot]
6f4f59a976 Merge pull request #7161 from nextcloud/automated/noid/main-update-nextcloud-ocp
[main] Update nextcloud/ocp dependency
2025-08-10 04:05:05 +00:00
nextcloud-command
f80d7a5e79 chore(dev-deps): Bump nextcloud/ocp package
Signed-off-by: GitHub <noreply@github.com>
2025-08-10 03:47:48 +00:00
Nextcloud bot
e3843f9808 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-10 00:28:20 +00:00
Nextcloud bot
1ec7f1a971 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-09 00:28:47 +00:00
7 changed files with 41 additions and 16 deletions

8
composer.lock generated
View File

@@ -380,12 +380,12 @@
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
"reference": "76e366bf801150029d17a516fa496b5b89a772ac"
"reference": "c2c75ad8fdc54cbc6341764b5a2a8ecf860e6160"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/76e366bf801150029d17a516fa496b5b89a772ac",
"reference": "76e366bf801150029d17a516fa496b5b89a772ac",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/c2c75ad8fdc54cbc6341764b5a2a8ecf860e6160",
"reference": "c2c75ad8fdc54cbc6341764b5a2a8ecf860e6160",
"shasum": ""
},
"require": {
@@ -421,7 +421,7 @@
"issues": "https://github.com/nextcloud-deps/ocp/issues",
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
},
"time": "2025-08-01T01:04:13+00:00"
"time": "2025-08-10T01:01:23+00:00"
},
{
"name": "nikic/php-parser",

View File

@@ -23,13 +23,16 @@ OC.L10N.register(
"Modified" : "Зменены",
"Save" : "Захаваць",
"Created:" : "Створана:",
"Reply" : "Адказаць",
"Open link" : "Адкрыць спасылку",
"seconds ago" : "с таму",
"Keyboard shortcuts" : "Спалучэнні клавіш",
"Keyboard shortcut" : "Спалучэнне клавіш",
"Action" : "Дзеянне",
"Search" : "Пошук",
"Shared with you" : "Абагулена з вамі",
"An error occurred" : "Узнікла памылка",
"No notifications" : "Няма апавяшчэнняў",
"Today" : "Сёння",
"Close" : "Закрыць",
"Share" : "Абагуліць"

View File

@@ -21,13 +21,16 @@
"Modified" : "Зменены",
"Save" : "Захаваць",
"Created:" : "Створана:",
"Reply" : "Адказаць",
"Open link" : "Адкрыць спасылку",
"seconds ago" : "с таму",
"Keyboard shortcuts" : "Спалучэнні клавіш",
"Keyboard shortcut" : "Спалучэнне клавіш",
"Action" : "Дзеянне",
"Search" : "Пошук",
"Shared with you" : "Абагулена з вамі",
"An error occurred" : "Узнікла памылка",
"No notifications" : "Няма апавяшчэнняў",
"Today" : "Сёння",
"Close" : "Закрыць",
"Share" : "Абагуліць"

View File

@@ -274,6 +274,7 @@ OC.L10N.register(
"{count} comments, {unread} unread" : "コメント {count} 件あり、 {unread} 件未読",
"Todo items" : "Todo項目",
"Edit card title" : "カードタイトルを編集する",
"Open link" : "リンクを開く",
"Card deleted" : "カードが削除されました",
"Edit title" : "タイトルを編集",
"Assign to me" : "自分に割り当てる",

View File

@@ -272,6 +272,7 @@
"{count} comments, {unread} unread" : "コメント {count} 件あり、 {unread} 件未読",
"Todo items" : "Todo項目",
"Edit card title" : "カードタイトルを編集する",
"Open link" : "リンクを開く",
"Card deleted" : "カードが削除されました",
"Edit title" : "タイトルを編集",
"Assign to me" : "自分に割り当てる",

View File

@@ -19,6 +19,7 @@ use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Db\Stack;
use OCA\Deck\Db\StackMapper;
use OCA\Deck\Event\CardCreatedEvent;
use OCA\Deck\Event\CardDeletedEvent;
@@ -64,31 +65,47 @@ class CardService {
) {
}
public function enrichCards($cards) {
/**
* @param Card[] $cards
* @return CardDetails[]
*/
public function enrichCards(array $cards, Stack $stack = null): array {
if (!$cards) {
return [];
}
$user = $this->userManager->get($this->userId);
$cardIds = array_map(function (Card $card) use ($user) {
$cardIds = array_map(function (Card $card) use ($user, $stack) {
// Everything done in here might be heavy as it is executed for every card
$cardId = $card->getId();
$this->cardMapper->mapOwner($card);
$card->setAttachmentCount($this->attachmentService->count($cardId));
// TODO We should find a better way just to get the comment count so we can save 1-3 queries per card here
$countComments = $this->commentsManager->getNumberOfCommentsForObject('deckCard', (string)$card->getId());
$lastRead = $countComments > 0 ? $this->commentsManager->getReadMark('deckCard', (string)$card->getId(), $user) : null;
$countUnreadComments = $lastRead ? $this->commentsManager->getNumberOfCommentsForObject('deckCard', (string)$card->getId(), $lastRead) : 0;
$card->setCommentsUnread($countUnreadComments);
$card->setCommentsCount($countComments);
$stack = $this->stackMapper->find($card->getStackId());
if ($stack === null) {
$stack = $this->stackMapper->find($card->getStackId());
}
$board = $this->boardService->find($stack->getBoardId(), false);
$card->setRelatedStack($stack);
$card->setRelatedBoard($board);
return $card->getId();
return $cardId;
}, $cards);
$commentsCountPerCardId = $this->commentsManager->getNumberOfCommentsForObjects('deckCard', $cardIds);
$unreadCommentsCountPerCardId = $this->commentsManager->getNumberOfUnreadCommentsForObjects('deckCard', $cardIds, $user);
foreach ($commentsCountPerCardId as $cardId => $commentCounts) {
foreach ($cards as $card) {
if ($card->getId() === $cardId) {
$card->setCommentsUnread($unreadCommentsCountPerCardId[$cardId]);
$card->setCommentsCount($commentCounts);
break;
}
}
}
$assignedLabels = $this->labelMapper->findAssignedLabelsForCards($cardIds);
$assignedUsers = $this->assignedUsersMapper->findIn($cardIds);

View File

@@ -82,7 +82,7 @@ class StackService {
return;
}
$stack->setCards($this->cardService->enrichCards($cards));
$stack->setCards($this->cardService->enrichCards($cards, $stack));
}
private function enrichStacksWithCards($stacks, $since = -1) {