From 8440b823cc26df13cd07815be343fbff32f62bcb Mon Sep 17 00:00:00 2001 From: Giuliano Mele Date: Thu, 22 Aug 2024 11:21:25 +0200 Subject: [PATCH] Add command to get one or multiple tags by folder and key Fixes #1, Fixes #2 --- appinfo/info.xml | 3 ++- lib/Command/GetTag.php | 52 ++++++++++++++++++++++++++++++++++++++ lib/Db/Tag.php | 11 +++++++- lib/Db/TagMapper.php | 26 ++++++++++++++++--- lib/Service/TagService.php | 10 +++++++- 5 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 lib/Command/GetTag.php diff --git a/appinfo/info.xml b/appinfo/info.xml index 25e00d2..8beb18f 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -19,5 +19,6 @@ OCA\GroupfolderTags\Command\Tag + OCA\GroupfolderTags\Command\GetTag - \ No newline at end of file + diff --git a/lib/Command/GetTag.php b/lib/Command/GetTag.php new file mode 100644 index 0000000..1817457 --- /dev/null +++ b/lib/Command/GetTag.php @@ -0,0 +1,52 @@ +setName('groupfolder-tags:get') + ->setDescription('Get single tag value by Groupfolder ID and key. Omit key to get all tags.') + ->addArgument('folder_id', InputArgument::REQUIRED, 'Groupfolder ID of the tag') + ->addArgument('key', InputArgument::OPTIONAL, 'Key of the tag'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $groupFolderId = $input->getArgument('folder_id'); + $tagKey = $input->getArgument('key'); + + if (!$this->getFolder($input, $output)) { + return 1; + } + + try { + $tags = $this->service->findByGroupFolderAndKey($groupFolderId, $tagKey); + + if (empty($tags)) { + $output->writeln("Could not find tag for Groupfolder"); + return 1; + } + + if (isset($tagKey)) { + /** @var Tag $tag */ + $tag = current($tags); + $output->writeln($tag->getTagValue()); + return 0; + } + + foreach ($tags as $tag) { + $output->writeln(json_encode($tag)); + } + return 0; + } catch (Exception $e) { + $output->writeln("Exception \"{$e->getMessage()}\" at {$e->getFile()} line {$e->getLine()}"); + return 1; + } + } +} diff --git a/lib/Db/Tag.php b/lib/Db/Tag.php index 729c597..998c527 100644 --- a/lib/Db/Tag.php +++ b/lib/Db/Tag.php @@ -17,6 +17,15 @@ class Tag extends Entity implements JsonSerializable { $this->addType('lastUpdatedTimestamp','integer'); } + /** + * @return mixed + */ + public function getTagValue() { + return $this->tagValue; + } + + + public function jsonSerialize(): array { return [ 'groupFolderId' => $this->groupFolderId, @@ -25,4 +34,4 @@ class Tag extends Entity implements JsonSerializable { 'lastUpdatedTimestamp' => $this->lastUpdatedTimestamp, ]; } -} \ No newline at end of file +} diff --git a/lib/Db/TagMapper.php b/lib/Db/TagMapper.php index 7b0604e..ae8fcb4 100644 --- a/lib/Db/TagMapper.php +++ b/lib/Db/TagMapper.php @@ -5,6 +5,7 @@ namespace OCA\GroupfolderTags\Db; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\QBMapper; +use OCP\DB\Exception; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; @@ -30,7 +31,7 @@ class TagMapper extends QBMapper { ->from(self::TABLENAME) ->where($qb->expr()->eq('group_folder_id', $qb->createNamedParameter($groupFolderId, IQueryBuilder::PARAM_INT))) ->andWhere($qb->expr()->eq('tag_key', $qb->createNamedParameter($tagKey))); - + return $this->findEntity($qb); } @@ -51,7 +52,7 @@ class TagMapper extends QBMapper { ->leftJoin('t', self::GROUP_FOLDERS_TABLENAME, 'g', $qb->expr()->andX( $qb->expr()->eq('t.group_folder_id', 'g.id'), )); - + return $this->findOneQuery($qb); } @@ -70,7 +71,24 @@ class TagMapper extends QBMapper { if(isset($tagValue)) { $qb->andWhere($qb->expr()->eq('tag_value', $qb->createNamedParameter($tagValue))); } - + return $this->findEntities($qb); } -} \ No newline at end of file + + /** + * @return Tag[] + * @throws Exception + */ + public function findByGroupFolderAndKey(string $groupFolderId, ?string $tagKey): array { + $qb = $this->db->getQueryBuilder(); + $qb->select('*') + ->from(self::TABLENAME) + ->where($qb->expr()->eq('group_folder_id', $qb->createNamedParameter($groupFolderId, IQueryBuilder::PARAM_INT))); + + if(isset($tagKey)) { + $qb->andWhere($qb->expr()->eq('tag_key', $qb->createNamedParameter($tagKey))); + } + + return $this->findEntities($qb); + } +} diff --git a/lib/Service/TagService.php b/lib/Service/TagService.php index 1127b90..4f36f7f 100644 --- a/lib/Service/TagService.php +++ b/lib/Service/TagService.php @@ -70,4 +70,12 @@ class TagService { $this->handleException($e); } } -} \ No newline at end of file + + /** + * @return Tag[] + * @throws \OCP\DB\Exception + */ + public function findByGroupFolderAndKey(int $groupFolderId, ?string $key): array { + return $this->mapper->findByGroupFolderAndKey($groupFolderId, $key); + } +}