Redis
This commit is contained in:
@ -4,35 +4,62 @@ namespace Incoviba\Controller;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Incoviba\Common\Alias\View;
|
||||
use Incoviba\Common\Implement\Exception\EmptyRedis;
|
||||
use Incoviba\Common\Implement\Exception\EmptyResult;
|
||||
use Incoviba\Model;
|
||||
use Incoviba\Repository;
|
||||
use Incoviba\Service;
|
||||
|
||||
class Proyectos
|
||||
{
|
||||
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, View $view, Repository\Proyecto $proyectoRepository): ResponseInterface
|
||||
use withRedis;
|
||||
|
||||
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, View $view,
|
||||
Repository\Proyecto $proyectoRepository): ResponseInterface
|
||||
{
|
||||
$proyectos = $proyectoRepository->fetchAll();
|
||||
usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) {
|
||||
return strcmp($a->descripcion, $b->descripcion);
|
||||
});
|
||||
$proyectos = [];
|
||||
try {
|
||||
$proyectos = $proyectoRepository->fetchAll();
|
||||
usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) {
|
||||
return strcmp($a->descripcion, $b->descripcion);
|
||||
});
|
||||
} catch (EmptyResult) {}
|
||||
return $view->render($response, 'proyectos.list', compact('proyectos'));
|
||||
}
|
||||
public function unidades(ServerRequestInterface $request, ResponseInterface $response, View $view, Repository\Proyecto $proyectoRepository, Repository\Venta\Unidad $unidadRepository): ResponseInterface
|
||||
public function unidades(ServerRequestInterface $request, ResponseInterface $response, View $view,
|
||||
Service\Redis $redisService, Repository\Proyecto $proyectoRepository,
|
||||
Repository\Venta\Unidad $unidadRepository): ResponseInterface
|
||||
{
|
||||
$proyectos = $proyectoRepository->fetchAll();
|
||||
$proyectos = array_filter($proyectos, function(Model\Proyecto $proyecto) use ($unidadRepository) {
|
||||
$unidades = $unidadRepository->fetchByProyecto($proyecto->id);
|
||||
return count($unidades) > 0;
|
||||
});
|
||||
usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) {
|
||||
return strcmp($a->descripcion, $b->descripcion);
|
||||
});
|
||||
$proyectos = [];
|
||||
$redisKey = "proyectos:con_unidades";
|
||||
try {
|
||||
$proyectos = $this->fetchRedis($redisService, $redisKey);
|
||||
} catch (EmptyRedis) {
|
||||
try {
|
||||
$proyectos = $proyectoRepository->fetchAll();
|
||||
$proyectos = array_filter($proyectos, function(Model\Proyecto $proyecto) use ($unidadRepository) {
|
||||
$unidades = $unidadRepository->fetchByProyecto($proyecto->id);
|
||||
return count($unidades) > 0;
|
||||
});
|
||||
usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) {
|
||||
return strcmp($a->descripcion, $b->descripcion);
|
||||
});
|
||||
$this->saveRedis($redisService, $redisKey, $proyectos);
|
||||
} catch (EmptyResult) {}
|
||||
}
|
||||
return $view->render($response, 'proyectos.unidades', compact('proyectos'));
|
||||
}
|
||||
public function show(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Proyecto $proyectoService, int $proyecto_id): ResponseInterface
|
||||
public function show(ServerRequestInterface $request, ResponseInterface $response, View $view,
|
||||
Service\Redis $redisService, Service\Proyecto $proyectoService,
|
||||
Repository\Proyecto $proyectoRepository, int $proyecto_id): ResponseInterface
|
||||
{
|
||||
$proyecto = $proyectoService->getById($proyecto_id);
|
||||
$redisKey = "proyecto:{$proyecto_id}";
|
||||
try {
|
||||
$proyecto = $proyectoService->getById($proyectoRepository->load((array) $this->fetchRedis($redisService, $redisKey)));
|
||||
} catch (EmptyRedis) {
|
||||
$proyecto = $proyectoService->getById($proyecto_id);
|
||||
$this->saveRedis($redisService, $redisKey, $proyecto);
|
||||
}
|
||||
return $view->render($response, 'proyectos.show', compact('proyecto'));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user