Files
oficial/app/src/Controller/Proyectos.php

66 lines
2.8 KiB
PHP
Raw Normal View History

<?php
namespace Incoviba\Controller;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Incoviba\Common\Alias\View;
2023-11-23 00:53:49 -03:00
use Incoviba\Common\Implement\Exception\EmptyRedis;
use Incoviba\Common\Implement\Exception\EmptyResult;
2023-09-07 23:03:21 -03:00
use Incoviba\Model;
2023-10-20 19:03:29 -03:00
use Incoviba\Repository;
use Incoviba\Service;
class Proyectos
{
2023-11-23 00:53:49 -03:00
use withRedis;
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, View $view,
Repository\Proyecto $proyectoRepository): ResponseInterface
{
2023-11-23 00:53:49 -03:00
$proyectos = [];
try {
$proyectos = $proyectoRepository->fetchAll();
usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) {
return strcmp($a->descripcion, $b->descripcion);
});
} catch (EmptyResult) {}
2023-10-13 10:45:21 -03:00
return $view->render($response, 'proyectos.list', compact('proyectos'));
}
2023-11-23 00:53:49 -03:00
public function unidades(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Redis $redisService, Repository\Proyecto $proyectoRepository,
Repository\Venta\Unidad $unidadRepository): ResponseInterface
{
2023-11-23 00:53:49 -03:00
$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) {}
}
2023-10-13 10:45:21 -03:00
return $view->render($response, 'proyectos.unidades', compact('proyectos'));
2023-09-07 23:03:21 -03:00
}
2023-11-23 00:53:49 -03:00
public function show(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Redis $redisService, Service\Proyecto $proyectoService,
Repository\Proyecto $proyectoRepository, int $proyecto_id): ResponseInterface
2023-10-20 19:03:29 -03:00
{
2023-11-23 00:53:49 -03:00
$redisKey = "proyecto:{$proyecto_id}";
try {
2023-11-30 18:40:15 -03:00
$proyecto = $proyectoService->getById($this->fetchRedis($redisService, $redisKey)->id);
2023-11-23 00:53:49 -03:00
} catch (EmptyRedis) {
$proyecto = $proyectoService->getById($proyecto_id);
$this->saveRedis($redisService, $redisKey, $proyecto);
}
2023-10-20 19:03:29 -03:00
return $view->render($response, 'proyectos.show', compact('proyecto'));
}
}