Added post content and thumbnail presenter
This commit is contained in:
parent
4ac91374b9
commit
55f4f4430b
3 changed files with 69 additions and 10 deletions
46
src/Controllers/PostContentController.php
Normal file
46
src/Controllers/PostContentController.php
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Controllers;
|
||||||
|
|
||||||
|
final class PostContentController extends AbstractController
|
||||||
|
{
|
||||||
|
private $postService;
|
||||||
|
private $fileService;
|
||||||
|
private $httpHelper;
|
||||||
|
private $thumbnailService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
\Szurubooru\Services\PostService $postService,
|
||||||
|
\Szurubooru\Services\FileService $fileService,
|
||||||
|
\Szurubooru\Helpers\HttpHelper $httpHelper,
|
||||||
|
\Szurubooru\Services\ThumbnailService $thumbnailService)
|
||||||
|
{
|
||||||
|
$this->postService = $postService;
|
||||||
|
$this->fileService = $fileService;
|
||||||
|
$this->httpHelper = $httpHelper;
|
||||||
|
$this->thumbnailService = $thumbnailService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerRoutes(\Szurubooru\Router $router)
|
||||||
|
{
|
||||||
|
$router->get('/api/posts/:postName/content', [$this, 'getPostContent']);
|
||||||
|
$router->get('/api/posts/:postName/thumbnail/:size', [$this, 'getPostThumbnail']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPostContent($postName)
|
||||||
|
{
|
||||||
|
$post = $this->postService->getByName($postName);
|
||||||
|
$source = $this->postService->getPostContentPath($post);
|
||||||
|
$this->fileService->serve($source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPostThumbnail($postName, $size)
|
||||||
|
{
|
||||||
|
$post = $this->postService->getByName($postName);
|
||||||
|
$source = $this->postService->getPostThumbnailSourcePath($post);
|
||||||
|
if (!$this->fileService->exists($source))
|
||||||
|
$source = $this->postService->getPostContentPath($post);
|
||||||
|
|
||||||
|
$sizedSource = $this->thumbnailService->getOrGenerate($source, $size, $size);
|
||||||
|
$this->fileService->serve($sizedSource);
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,6 +29,18 @@ class PostService
|
||||||
$this->authService = $authService;
|
$this->authService = $authService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getByName($postName)
|
||||||
|
{
|
||||||
|
$transactionFunc = function() use ($postName)
|
||||||
|
{
|
||||||
|
$post = $this->postDao->findByName($postName);
|
||||||
|
if (!$post)
|
||||||
|
throw new \InvalidArgumentException('Post with name "' . $postName . '" was not found.');
|
||||||
|
return $post;
|
||||||
|
};
|
||||||
|
return $this->transactionManager->rollback($transactionFunc);
|
||||||
|
}
|
||||||
|
|
||||||
public function createPost(\Szurubooru\FormData\UploadFormData $formData)
|
public function createPost(\Szurubooru\FormData\UploadFormData $formData)
|
||||||
{
|
{
|
||||||
$transactionFunc = function() use ($formData)
|
$transactionFunc = function() use ($formData)
|
||||||
|
@ -52,6 +64,16 @@ class PostService
|
||||||
return $this->transactionManager->commit($transactionFunc);
|
return $this->transactionManager->commit($transactionFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPostContentPath(\Szurubooru\Entities\Post $post)
|
||||||
|
{
|
||||||
|
return 'posts' . DIRECTORY_SEPARATOR . $post->getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPostThumbnailSourcePath(\Szurubooru\Entities\Post $post)
|
||||||
|
{
|
||||||
|
return 'posts' . DIRECTORY_SEPARATOR . $post->getName() . '-custom-thumb';
|
||||||
|
}
|
||||||
|
|
||||||
private function updatePostSafety(\Szurubooru\Entities\Post $post, $newSafety)
|
private function updatePostSafety(\Szurubooru\Entities\Post $post, $newSafety)
|
||||||
{
|
{
|
||||||
$post->setSafety($newSafety);
|
$post->setSafety($newSafety);
|
||||||
|
@ -167,14 +189,4 @@ class PostService
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getPostContentPath(\Szurubooru\Entities\Post $post)
|
|
||||||
{
|
|
||||||
return 'posts' . DIRECTORY_SEPARATOR . $post->getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getPostThumbnailSourcePath(\Szuruboor\Entities\Post $post)
|
|
||||||
{
|
|
||||||
return 'posts' . DIRECTORY_SEPARATOR . $post->getName() . '-custom-thumb';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ 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\PostController::class),
|
$container->get(\Szurubooru\Controllers\PostController::class),
|
||||||
|
$container->get(\Szurubooru\Controllers\PostContentController::class),
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue