<?php
// src/Controller/DigiEntityController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Component\HttpClient\HttpOptions;
use Symfony\Component\DependencyInjection\ContainerInterface;
use App\Repository\EntityRepository;
use App\Repository\DigiEntityRepository;
/**
* @Route("/entity", name="entity_")
*/
abstract class DigiEntityController extends EntityController
{
/** @var DigiEntityRepository $repository */
protected ?EntityRepository $repository;
protected HttpClientInterface $client;
public function __construct(ContainerInterface $container, EntityManagerInterface $em, HttpClientInterface $client)
{
parent::__construct($container, $em);
$this->client = $client;
$this->repository::__setClient($client);
}
/**
* @Route("/api/list", name="api_list")
*/
public function APIListAction() :Response
{
$data = $this->repository->api_list();
//var_dump($api_response);
if (false) foreach($data as $row) {
var_dump($row);
echo '<hr />';
//json_encode($row);
}
return new JsonResponse(['r'=>true, 'data'=>$data]);
}
/**
* @Route("/api/sync_all", name="api_sync_all")
*/
public function APISyncAllAction(Request $request)
{
$options=[];
$options['fromlast'] = !empty($request->query->get('fromlast'));
$limit = $request->query->get('limit');
if (!is_numeric($limit) || (int)$limit != $limit || $limit<0)
$limit = $this->repository::API_SYNC_LIMIT;
$page = $request->query->get('page');
if (!is_numeric($page) || (int)$page != $page || $page<0)
$page = 0;
//var_dump($page, $limit); die();
$data = $this->repository->api_sync_all($this->repository::API_QUERY_LIST, $limit, $page, $options);
return new JsonResponse(['r'=>true, 'data'=>$data]);
}
/**
* @Route("/api/read", name="api_read")
*/
public function APIReadAction(Request $request, int $digi_id=NULL) :Response
{
$digi_id = $request->query->get('digi_id');
$data = $this->repository->api_read($this->repository::API_QUERY_ID, $digi_id);
return new JsonResponse(['r'=>true, 'data'=>$data]);
}
/**
* @Route("/api/sync", name="api_sync")
*/
public function APISyncAction(Request $request, int $digi_id=NULL) :Response
{
$digi_id = $request->query->get('digi_id');
$data = $this->repository->api_sync($this->repository::API_QUERY_ID, $digi_id);
//var_dump($data); die();
return new JsonResponse(['r'=>true, 'data'=>$data]);
}
/**
* @Route("/api/{id}/save", name="api_save")
*/
public function APISaveAction(Request $request, int $id) :Response
{
//$id = $request->query->get('id');
//var_dump($id); die();
$data = $this->repository->api_save($this->repository::API_QUERY_SAVE, $id);
return new JsonResponse(['r'=>true, 'redirect'=>$this->generateUrl(static::REF.'_read', ['id'=>$id]), 'data'=>$data]);
}
/**
* @Route("/api/{id}/update", name="api_update")
*/
public function APIUpdateAction(Request $request, int $id) :Response
{
$data = $this->repository->api_update($this->repository::API_QUERY_UPDATE, $id);
return new JsonResponse(['r'=>true, 'data'=>$data]);
}
/**
* @Route("/api/delete", name="api_delete")
*/
public function APIDeleteAction(Request $request, int $digi_id=NULL) :Response
{
$digi_id = $request->query->get('digi_id');
$data = $this->repository->api_delete($this->repository::API_QUERY_DELETE, $digi_id);
return new JsonResponse(['r'=>true, 'redirect'=>'', 'data'=>$data]);
}
/* PARAMS */
public function params()
{
parent::params();
$this->params['api'] = [
'id' => $this->repository::API_ID,
'name' => $this->repository::API_NAME,
'map' => $this->repository::API_MAP,
];
$this->params['route'] = array_merge($this->params['route'], [
'api_read' => static::REF.'_api_read',
'api_sync' => static::REF.'_api_sync',
'api_update' => static::REF.'_api_update',
'api_delete' => static::REF.'_api_delete',
]);
}
}