Reduced requests in post view
This commit is contained in:
parent
c0bc4d4f19
commit
50ca13b136
7 changed files with 99 additions and 48 deletions
1
TODO
1
TODO
|
@ -3,7 +3,6 @@ first major release.
|
||||||
|
|
||||||
everything related to posts:
|
everything related to posts:
|
||||||
- single post view
|
- single post view
|
||||||
- reduce requests to server
|
|
||||||
- editing
|
- editing
|
||||||
- ability to loop video posts
|
- ability to loop video posts
|
||||||
- previous and next post (difficult)
|
- previous and next post (difficult)
|
||||||
|
|
|
@ -84,24 +84,12 @@ App.Presenters.PostPresenter = function(
|
||||||
|
|
||||||
function refreshPost() {
|
function refreshPost() {
|
||||||
return promise.make(function(resolve, reject) {
|
return promise.make(function(resolve, reject) {
|
||||||
promise.waitAll(
|
promise.waitAll(api.get('/posts/' + postNameOrId))
|
||||||
api.get('/posts/' + postNameOrId),
|
.then(function(postResponse) {
|
||||||
api.get('/posts/' + postNameOrId + '/favorites'),
|
|
||||||
auth.isLoggedIn() ?
|
|
||||||
api.get('/posts/' + postNameOrId + '/score') :
|
|
||||||
null,
|
|
||||||
privileges.canViewHistory ?
|
|
||||||
api.get('/posts/' + postNameOrId + '/history') :
|
|
||||||
null)
|
|
||||||
.then(function(
|
|
||||||
postResponse,
|
|
||||||
postFavoritesResponse,
|
|
||||||
postScoreResponse,
|
|
||||||
postHistoryResponse) {
|
|
||||||
post = postResponse.json;
|
post = postResponse.json;
|
||||||
postScore = postScoreResponse && postScoreResponse.json && postScoreResponse.json.score;
|
postScore = postResponse.json.ownScore;
|
||||||
postFavorites = postFavoritesResponse && postFavoritesResponse.json && postFavoritesResponse.json.data;
|
postFavorites = postResponse.json.favorites;
|
||||||
postHistory = postHistoryResponse && postHistoryResponse.json && postHistoryResponse.json.data;
|
postHistory = postResponse.json.history;
|
||||||
resolve();
|
resolve();
|
||||||
}).fail(function(response) {
|
}).fail(function(response) {
|
||||||
showGenericError(response);
|
showGenericError(response);
|
||||||
|
|
|
@ -131,6 +131,9 @@ final class PostController extends AbstractController
|
||||||
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_RELATIONS => true,
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_RELATIONS => true,
|
||||||
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_TAGS => true,
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_TAGS => true,
|
||||||
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_USER => true,
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_USER => true,
|
||||||
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_HISTORY => true,
|
||||||
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_OWN_SCORE => true,
|
||||||
|
\Szurubooru\Controllers\ViewProxies\PostViewProxy::FETCH_FAVORITES => true,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,23 +6,45 @@ class PostViewProxy extends AbstractViewProxy
|
||||||
const FETCH_USER = 'fetchUser';
|
const FETCH_USER = 'fetchUser';
|
||||||
const FETCH_TAGS = 'fetchTags';
|
const FETCH_TAGS = 'fetchTags';
|
||||||
const FETCH_RELATIONS = 'fetchRelations';
|
const FETCH_RELATIONS = 'fetchRelations';
|
||||||
|
const FETCH_HISTORY = 'fetchHistory';
|
||||||
|
const FETCH_OWN_SCORE = 'fetchOwnScore';
|
||||||
|
const FETCH_FAVORITES = 'fetchFavorites';
|
||||||
|
|
||||||
|
private $privilegeService;
|
||||||
|
private $authService;
|
||||||
|
private $historyService;
|
||||||
|
private $favoritesService;
|
||||||
|
private $postScoreService;
|
||||||
private $tagViewProxy;
|
private $tagViewProxy;
|
||||||
private $userViewProxy;
|
private $userViewProxy;
|
||||||
|
private $snapshotViewProxy;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
|
\Szurubooru\Services\PrivilegeService $privilegeService,
|
||||||
|
\Szurubooru\Services\AuthService $authService,
|
||||||
|
\Szurubooru\Services\HistoryService $historyService,
|
||||||
|
\Szurubooru\Services\FavoritesService $favoritesService,
|
||||||
|
\Szurubooru\Services\PostScoreService $postScoreService,
|
||||||
TagViewProxy $tagViewProxy,
|
TagViewProxy $tagViewProxy,
|
||||||
UserViewProxy $userViewProxy)
|
UserViewProxy $userViewProxy,
|
||||||
|
SnapshotViewProxy $snapshotViewProxy)
|
||||||
{
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->authService = $authService;
|
||||||
|
$this->historyService = $historyService;
|
||||||
|
$this->favoritesService = $favoritesService;
|
||||||
|
$this->postScoreService = $postScoreService;
|
||||||
$this->tagViewProxy = $tagViewProxy;
|
$this->tagViewProxy = $tagViewProxy;
|
||||||
$this->userViewProxy = $userViewProxy;
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
$this->snapshotViewProxy = $snapshotViewProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fromEntity($post, $config = [])
|
public function fromEntity($post, $config = [])
|
||||||
{
|
{
|
||||||
$result = new \StdClass;
|
$result = new \StdClass;
|
||||||
if ($post)
|
if (!$post)
|
||||||
{
|
return $result;
|
||||||
|
|
||||||
$result->id = $post->getId();
|
$result->id = $post->getId();
|
||||||
$result->idMarkdown = $post->getIdMarkdown();
|
$result->idMarkdown = $post->getIdMarkdown();
|
||||||
$result->name = $post->getName();
|
$result->name = $post->getName();
|
||||||
|
@ -50,7 +72,22 @@ class PostViewProxy extends AbstractViewProxy
|
||||||
|
|
||||||
if (!empty($config[self::FETCH_RELATIONS]))
|
if (!empty($config[self::FETCH_RELATIONS]))
|
||||||
$result->relations = $this->fromArray($post->getRelatedPosts());
|
$result->relations = $this->fromArray($post->getRelatedPosts());
|
||||||
|
|
||||||
|
if (!empty($config[self::FETCH_HISTORY]))
|
||||||
|
{
|
||||||
|
if ($this->privilegeService->hasPrivilege(\Szurubooru\Privilege::VIEW_HISTORY))
|
||||||
|
$result->history = $this->snapshotViewProxy->fromArray($this->historyService->getPostHistory($post));
|
||||||
|
else
|
||||||
|
$result->history = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($config[self::FETCH_OWN_SCORE]) and $this->authService->isLoggedIn())
|
||||||
|
$result->ownScore = $this->postScoreService->getScoreValue($this->authService->getLoggedInUser(), $post);
|
||||||
|
|
||||||
|
if (!empty($config[self::FETCH_FAVORITES]))
|
||||||
|
$result->favorites = $this->userViewProxy->fromArray($this->favoritesService->getFavoriteUsers($post));
|
||||||
|
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,4 +26,3 @@ class SnapshotViewProxy extends AbstractViewProxy
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,23 @@ class HistoryService
|
||||||
return $this->transactionManager->rollback($transactionFunc);
|
return $this->transactionManager->rollback($transactionFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPostHistory(\Szurubooru\Entities\Post $post)
|
||||||
|
{
|
||||||
|
$filter = new \Szurubooru\SearchServices\Filters\SnapshotFilter();
|
||||||
|
|
||||||
|
$requirement = new \Szurubooru\SearchServices\Requirements\Requirement();
|
||||||
|
$requirement->setType(\Szurubooru\SearchServices\Filters\SnapshotFilter::REQUIREMENT_PRIMARY_KEY);
|
||||||
|
$requirement->setValue(new \Szurubooru\SearchServices\Requirements\RequirementSingleValue($post->getId()));
|
||||||
|
$filter->addRequirement($requirement);
|
||||||
|
|
||||||
|
$requirement = new \Szurubooru\SearchServices\Requirements\Requirement();
|
||||||
|
$requirement->setType(\Szurubooru\SearchServices\Filters\SnapshotFilter::REQUIREMENT_TYPE);
|
||||||
|
$requirement->setValue(new \Szurubooru\SearchServices\Requirements\RequirementSingleValue(\Szurubooru\Entities\Snapshot::TYPE_POST));
|
||||||
|
$filter->addRequirement($requirement);
|
||||||
|
|
||||||
|
return $this->getFiltered($filter)->getEntities();
|
||||||
|
}
|
||||||
|
|
||||||
public function saveSnapshot(\Szurubooru\Entities\Snapshot $snapshot)
|
public function saveSnapshot(\Szurubooru\Entities\Snapshot $snapshot)
|
||||||
{
|
{
|
||||||
$transactionFunc = function() use ($snapshot)
|
$transactionFunc = function() use ($snapshot)
|
||||||
|
|
|
@ -32,6 +32,14 @@ class PostScoreService
|
||||||
return $this->transactionManager->rollback($transactionFunc);
|
return $this->transactionManager->rollback($transactionFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getScoreValue(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post)
|
||||||
|
{
|
||||||
|
$score = $this->getScore($user, $post);
|
||||||
|
if (!$score)
|
||||||
|
return 0;
|
||||||
|
return $score->getScore();
|
||||||
|
}
|
||||||
|
|
||||||
public function setScore(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post, $scoreValue)
|
public function setScore(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post, $scoreValue)
|
||||||
{
|
{
|
||||||
if ($scoreValue !== 1 and $scoreValue !== 0 and $scoreValue !== -1)
|
if ($scoreValue !== 1 and $scoreValue !== 0 and $scoreValue !== -1)
|
||||||
|
|
Loading…
Reference in a new issue