Moved tag controller to routes
This commit is contained in:
parent
9de6e7e739
commit
76edbfeddb
10 changed files with 306 additions and 128 deletions
|
@ -1,127 +0,0 @@
|
||||||
<?php
|
|
||||||
namespace Szurubooru\Controllers;
|
|
||||||
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
|
||||||
use Szurubooru\FormData\TagEditFormData;
|
|
||||||
use Szurubooru\Helpers\InputReader;
|
|
||||||
use Szurubooru\Privilege;
|
|
||||||
use Szurubooru\Router;
|
|
||||||
use Szurubooru\SearchServices\Parsers\TagSearchParser;
|
|
||||||
use Szurubooru\Services\PrivilegeService;
|
|
||||||
use Szurubooru\Services\TagService;
|
|
||||||
|
|
||||||
final class TagController extends AbstractController
|
|
||||||
{
|
|
||||||
private $privilegeService;
|
|
||||||
private $tagService;
|
|
||||||
private $tagViewProxy;
|
|
||||||
private $tagSearchParser;
|
|
||||||
private $inputReader;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
PrivilegeService $privilegeService,
|
|
||||||
TagService $tagService,
|
|
||||||
TagViewProxy $tagViewProxy,
|
|
||||||
TagSearchParser $tagSearchParser,
|
|
||||||
InputReader $inputReader)
|
|
||||||
{
|
|
||||||
$this->privilegeService = $privilegeService;
|
|
||||||
$this->tagService = $tagService;
|
|
||||||
$this->tagViewProxy = $tagViewProxy;
|
|
||||||
$this->tagSearchParser = $tagSearchParser;
|
|
||||||
$this->inputReader = $inputReader;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerRoutes(Router $router)
|
|
||||||
{
|
|
||||||
$router->get('/api/tags', [$this, 'getTags']);
|
|
||||||
$router->get('/api/tags/:tagName', [$this, 'getTag']);
|
|
||||||
$router->get('/api/tags/:tagName/siblings', [$this, 'getTagSiblings']);
|
|
||||||
$router->put('/api/tags/:tagName', [$this, 'updateTag']);
|
|
||||||
$router->put('/api/tags/:tagName/merge', [$this, 'mergeTag']);
|
|
||||||
$router->delete('/api/tags/:tagName', [$this, 'deleteTag']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTag($tagName)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
|
||||||
|
|
||||||
$tag = $this->tagService->getByName($tagName);
|
|
||||||
return $this->tagViewProxy->fromEntity($tag, $this->getFullFetchConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTags()
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
|
||||||
|
|
||||||
$filter = $this->tagSearchParser->createFilterFromInputReader($this->inputReader);
|
|
||||||
$filter->setPageSize(50);
|
|
||||||
|
|
||||||
$result = $this->tagService->getFiltered($filter);
|
|
||||||
$entities = $this->tagViewProxy->fromArray($result->getEntities(), $this->getFullFetchConfig());
|
|
||||||
return [
|
|
||||||
'data' => $entities,
|
|
||||||
'pageSize' => $result->getPageSize(),
|
|
||||||
'totalRecords' => $result->getTotalRecords()];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTagSiblings($tagName)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
|
||||||
$tag = $this->tagService->getByName($tagName);
|
|
||||||
$result = $this->tagService->getSiblings($tagName);
|
|
||||||
$entities = $this->tagViewProxy->fromArray($result);
|
|
||||||
return [
|
|
||||||
'data' => $entities,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function updateTag($tagName)
|
|
||||||
{
|
|
||||||
$tag = $this->tagService->getByName($tagName);
|
|
||||||
$formData = new TagEditFormData($this->inputReader);
|
|
||||||
|
|
||||||
if ($formData->name !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_NAME);
|
|
||||||
|
|
||||||
if ($formData->category !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_CATEGORY);
|
|
||||||
|
|
||||||
if ($formData->banned !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::BAN_TAGS);
|
|
||||||
|
|
||||||
if ($formData->implications !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_IMPLICATIONS);
|
|
||||||
|
|
||||||
if ($formData->suggestions !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_SUGGESTIONS);
|
|
||||||
|
|
||||||
$tag = $this->tagService->updateTag($tag, $formData);
|
|
||||||
return $this->tagViewProxy->fromEntity($tag, $this->getFullFetchConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteTag($tagName)
|
|
||||||
{
|
|
||||||
$tag = $this->tagService->getByName($tagName);
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::DELETE_TAGS);
|
|
||||||
return $this->tagService->deleteTag($tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function mergeTag($tagName)
|
|
||||||
{
|
|
||||||
$targetTagName = $this->inputReader->targetTag;
|
|
||||||
$sourceTag = $this->tagService->getByName($tagName);
|
|
||||||
$targetTag = $this->tagService->getByName($targetTagName);
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::MERGE_TAGS);
|
|
||||||
return $this->tagService->mergeTag($sourceTag, $targetTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getFullFetchConfig()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
[
|
|
||||||
TagViewProxy::FETCH_IMPLICATIONS => true,
|
|
||||||
TagViewProxy::FETCH_SUGGESTIONS => true,
|
|
||||||
TagViewProxy::FETCH_HISTORY => true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
BIN
src/Routes/Tags/.UpdateTag.php.swp
Normal file
BIN
src/Routes/Tags/.UpdateTag.php.swp
Normal file
Binary file not shown.
17
src/Routes/Tags/AbstractTagRoute.php
Normal file
17
src/Routes/Tags/AbstractTagRoute.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Routes\AbstractRoute;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
||||||
|
|
||||||
|
abstract class AbstractTagRoute extends AbstractRoute
|
||||||
|
{
|
||||||
|
protected function getFullFetchConfig()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
[
|
||||||
|
TagViewProxy::FETCH_IMPLICATIONS => true,
|
||||||
|
TagViewProxy::FETCH_SUGGESTIONS => true,
|
||||||
|
TagViewProxy::FETCH_HISTORY => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
36
src/Routes/Tags/DeleteTag.php
Normal file
36
src/Routes/Tags/DeleteTag.php
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class DeleteTag extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['DELETE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags/:tagName';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$tag = $this->tagService->getByName($this->getArgument('tagName'));
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::DELETE_TAGS);
|
||||||
|
return $this->tagService->deleteTag($tag);
|
||||||
|
}
|
||||||
|
}
|
41
src/Routes/Tags/GetTag.php
Normal file
41
src/Routes/Tags/GetTag.php
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class GetTag extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
private $tagViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService,
|
||||||
|
TagViewProxy $tagViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
$this->tagViewProxy = $tagViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags/:tagName';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
||||||
|
|
||||||
|
$tag = $this->tagService->getByName($this->getArgument('tagName'));
|
||||||
|
return $this->tagViewProxy->fromEntity($tag, $this->getFullFetchConfig());
|
||||||
|
}
|
||||||
|
}
|
45
src/Routes/Tags/GetTagSiblings.php
Normal file
45
src/Routes/Tags/GetTagSiblings.php
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class GetTagSiblings extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
private $tagViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService,
|
||||||
|
TagViewProxy $tagViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
$this->tagViewProxy = $tagViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags/:tagName/siblings';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$tagName = $this->getArgument('tagName');
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
||||||
|
$tag = $this->tagService->getByName($tagName);
|
||||||
|
$result = $this->tagService->getSiblings($tagName);
|
||||||
|
$entities = $this->tagViewProxy->fromArray($result);
|
||||||
|
return [
|
||||||
|
'data' => $entities,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
56
src/Routes/Tags/GetTags.php
Normal file
56
src/Routes/Tags/GetTags.php
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\SearchServices\Parsers\TagSearchParser;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class GetTags extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
private $tagViewProxy;
|
||||||
|
private $tagSearchParser;
|
||||||
|
private $inputReader;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService,
|
||||||
|
TagViewProxy $tagViewProxy,
|
||||||
|
TagSearchParser $tagSearchParser,
|
||||||
|
InputReader $inputReader)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
$this->tagViewProxy = $tagViewProxy;
|
||||||
|
$this->tagSearchParser = $tagSearchParser;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::LIST_TAGS);
|
||||||
|
|
||||||
|
$filter = $this->tagSearchParser->createFilterFromInputReader($this->inputReader);
|
||||||
|
$filter->setPageSize(50);
|
||||||
|
|
||||||
|
$result = $this->tagService->getFiltered($filter);
|
||||||
|
$entities = $this->tagViewProxy->fromArray($result->getEntities(), $this->getFullFetchConfig());
|
||||||
|
return [
|
||||||
|
'data' => $entities,
|
||||||
|
'pageSize' => $result->getPageSize(),
|
||||||
|
'totalRecords' => $result->getTotalRecords()];
|
||||||
|
}
|
||||||
|
}
|
43
src/Routes/Tags/MergeTags.php
Normal file
43
src/Routes/Tags/MergeTags.php
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class MergeTags extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
private $inputReader;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService,
|
||||||
|
InputReader $inputReader)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags/:tagName/merge';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$tagName = $this->getArgument('tagName');
|
||||||
|
$targetTagName = $this->inputReader->targetTag;
|
||||||
|
$sourceTag = $this->tagService->getByName($tagName);
|
||||||
|
$targetTag = $this->tagService->getByName($targetTagName);
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::MERGE_TAGS);
|
||||||
|
return $this->tagService->mergeTag($sourceTag, $targetTag);
|
||||||
|
}
|
||||||
|
}
|
62
src/Routes/Tags/UpdateTag.php
Normal file
62
src/Routes/Tags/UpdateTag.php
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Tags;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\TagViewProxy;
|
||||||
|
use Szurubooru\FormData\TagEditFormData;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
use Szurubooru\Services\TagService;
|
||||||
|
|
||||||
|
class UpdateTag extends AbstractTagRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $tagService;
|
||||||
|
private $tagViewProxy;
|
||||||
|
private $inputReader;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
TagService $tagService,
|
||||||
|
TagViewProxy $tagViewProxy,
|
||||||
|
InputReader $inputReader)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->tagService = $tagService;
|
||||||
|
$this->tagViewProxy = $tagViewProxy;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/tags/:tagName';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$tag = $this->tagService->getByName($this->getArgument('tagName'));
|
||||||
|
$formData = new TagEditFormData($this->inputReader);
|
||||||
|
|
||||||
|
if ($formData->name !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_NAME);
|
||||||
|
|
||||||
|
if ($formData->category !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_CATEGORY);
|
||||||
|
|
||||||
|
if ($formData->banned !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::BAN_TAGS);
|
||||||
|
|
||||||
|
if ($formData->implications !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_IMPLICATIONS);
|
||||||
|
|
||||||
|
if ($formData->suggestions !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_TAG_SUGGESTIONS);
|
||||||
|
|
||||||
|
$tag = $this->tagService->updateTag($tag, $formData);
|
||||||
|
return $this->tagViewProxy->fromEntity($tag, $this->getFullFetchConfig());
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,7 +60,6 @@ return [
|
||||||
$container->get(\Szurubooru\Controllers\UserController::class),
|
$container->get(\Szurubooru\Controllers\UserController::class),
|
||||||
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
||||||
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
||||||
$container->get(\Szurubooru\Controllers\TagController::class),
|
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
@ -90,6 +89,12 @@ return [
|
||||||
$container->get(\Szurubooru\Routes\Posts\Notes\DeletePostNote::class),
|
$container->get(\Szurubooru\Routes\Posts\Notes\DeletePostNote::class),
|
||||||
$container->get(\Szurubooru\Routes\Posts\Notes\GetPostNotes::class),
|
$container->get(\Szurubooru\Routes\Posts\Notes\GetPostNotes::class),
|
||||||
$container->get(\Szurubooru\Routes\Posts\Notes\UpdatePostNote::class),
|
$container->get(\Szurubooru\Routes\Posts\Notes\UpdatePostNote::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\DeleteTag::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\GetTag::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\GetTagSiblings::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\GetTags::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\MergeTags::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Tags\UpdateTag::class),
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue