Refactor API controller for ease of use
This commit is contained in:
parent
f7c9931d9f
commit
e56929dbcc
2 changed files with 57 additions and 49 deletions
|
|
@ -2,13 +2,12 @@
|
||||||
|
|
||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
use App\Ramcar\BaseController;
|
|
||||||
|
|
||||||
use Doctrine\ORM\Query;
|
use Doctrine\ORM\Query;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
use Doctrine\DBAL\DBALException;
|
use Doctrine\DBAL\DBALException;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
|
||||||
use App\Ramcar\APIResult;
|
use App\Ramcar\APIResult;
|
||||||
use App\Entity\MobileSession;
|
use App\Entity\MobileSession;
|
||||||
|
|
@ -16,8 +15,15 @@ use App\Entity\MobileSession;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
|
||||||
|
|
||||||
class APIController extends BaseController
|
class APIController extends Controller
|
||||||
{
|
{
|
||||||
|
protected $session;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->session = null;
|
||||||
|
}
|
||||||
|
|
||||||
protected function checkMissingParameters(Request $req, $params = [])
|
protected function checkMissingParameters(Request $req, $params = [])
|
||||||
{
|
{
|
||||||
$missing = [];
|
$missing = [];
|
||||||
|
|
@ -44,16 +50,50 @@ class APIController extends BaseController
|
||||||
return $missing;
|
return $missing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type hint entity manager
|
||||||
protected function checkAPIKey($em, $api_key)
|
protected function checkAPIKey($em, $api_key)
|
||||||
{
|
{
|
||||||
// find the api key (session id)
|
// find the api key (session id)
|
||||||
$session = $em->getRepository(MobileSession::class)->find($api_key);
|
$session = $em->getRepository(MobileSession::class)->find($api_key);
|
||||||
if ($session == null)
|
if ($session == null)
|
||||||
return false;
|
return null;
|
||||||
|
|
||||||
return $session;
|
return $session;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function checkParamsAndKey(Request $req, $em, $params)
|
||||||
|
{
|
||||||
|
// returns APIResult object
|
||||||
|
$res = new APIResult();
|
||||||
|
|
||||||
|
// inject api_key in params
|
||||||
|
$params[] = 'api_key';
|
||||||
|
|
||||||
|
// check missing parameters
|
||||||
|
$missing = $this->checkMissingParameters($req, $params);
|
||||||
|
if (count($missing) > 0)
|
||||||
|
{
|
||||||
|
$miss_string = implode(', ', $missing);
|
||||||
|
$res->setError(true)
|
||||||
|
->setErrorMessage('Missing parameter(s): ' . $miss_string);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check api key
|
||||||
|
$sess = $this->checkAPIKey($em, $req->request->get('api_key'));
|
||||||
|
if ($sess == null)
|
||||||
|
{
|
||||||
|
$res->setError(true)
|
||||||
|
->setErrorMessage('Invalid API Key');
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// store session
|
||||||
|
$this->session = $sess;
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
public function register(Request $req)
|
public function register(Request $req)
|
||||||
{
|
{
|
||||||
$res = new APIResult();
|
$res = new APIResult();
|
||||||
|
|
@ -70,7 +110,7 @@ class APIController extends BaseController
|
||||||
if (count($missing) > 0)
|
if (count($missing) > 0)
|
||||||
{
|
{
|
||||||
$params = implode(', ', $missing);
|
$params = implode(', ', $missing);
|
||||||
$res->setErrorFlag(true)
|
$res->setError(true)
|
||||||
->setErrorMessage('Missing parameter(s): ' . $params);
|
->setErrorMessage('Missing parameter(s): ' . $params);
|
||||||
return $this->json($res->getReturnResponse());
|
return $this->json($res->getReturnResponse());
|
||||||
}
|
}
|
||||||
|
|
@ -126,33 +166,16 @@ class APIController extends BaseController
|
||||||
|
|
||||||
public function confirmNumber(Request $req)
|
public function confirmNumber(Request $req)
|
||||||
{
|
{
|
||||||
$res = new APIResult();
|
|
||||||
|
|
||||||
// check parameters
|
// check parameters
|
||||||
$required_params = [
|
$required_params = [
|
||||||
'api_key',
|
|
||||||
'phone_number',
|
'phone_number',
|
||||||
];
|
];
|
||||||
|
|
||||||
$missing = $this->checkMissingParameters($req, $required_params);
|
// check required parameters and api key
|
||||||
if (count($missing) > 0)
|
|
||||||
{
|
|
||||||
$params = implode(', ', $missing);
|
|
||||||
$res->setErrorFlag(true)
|
|
||||||
->setErrorMessage('Missing parameter(s): ' . $params);
|
|
||||||
return $this->json($res->getReturnResponse());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// check api key
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
$sess = $this->checkAPIKey($em, $req->request->get('api_key'));
|
$res = $this->checkParamsAndKey($req, $em, $required_params);
|
||||||
if (!$sess)
|
if ($res->isError())
|
||||||
{
|
|
||||||
$res->setErrorFlag(true)
|
|
||||||
->setErrorMessage('Invalid API Key');
|
|
||||||
return $this->json($res->getReturnResponse());
|
return $this->json($res->getReturnResponse());
|
||||||
}
|
|
||||||
|
|
||||||
// phone number
|
// phone number
|
||||||
$phone_number = $req->request->get('phone_number');
|
$phone_number = $req->request->get('phone_number');
|
||||||
|
|
@ -162,7 +185,7 @@ class APIController extends BaseController
|
||||||
// TODO: generate code and save
|
// TODO: generate code and save
|
||||||
// use '123456' for now
|
// use '123456' for now
|
||||||
$code = '123456';
|
$code = '123456';
|
||||||
$sess->setConfirmCode($code)
|
$this->session->setConfirmCode($code)
|
||||||
->setPhoneNumber($phone_number);
|
->setPhoneNumber($phone_number);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
|
|
@ -178,42 +201,27 @@ class APIController extends BaseController
|
||||||
|
|
||||||
// check parameters
|
// check parameters
|
||||||
$required_params = [
|
$required_params = [
|
||||||
'api_key',
|
|
||||||
'code',
|
'code',
|
||||||
];
|
];
|
||||||
|
|
||||||
$missing = $this->checkMissingParameters($req, $required_params);
|
// check required parameters and api key
|
||||||
if (count($missing) > 0)
|
|
||||||
{
|
|
||||||
$params = implode(', ', $missing);
|
|
||||||
$res->setErrorFlag(true)
|
|
||||||
->setErrorMessage('Missing parameter(s): ' . $params);
|
|
||||||
return $this->json($res->getReturnResponse());
|
|
||||||
}
|
|
||||||
|
|
||||||
// check api key
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
$sess = $this->checkAPIKey($em, $req->request->get('api_key'));
|
$res = $this->checkParamsAndKey($req, $em, $required_params);
|
||||||
if (!$sess)
|
if ($res->isError())
|
||||||
{
|
|
||||||
$res->setErrorFlag(true)
|
|
||||||
->setErrorMessage('Invalid API Key');
|
|
||||||
return $this->json($res->getReturnResponse());
|
return $this->json($res->getReturnResponse());
|
||||||
}
|
|
||||||
|
|
||||||
$code = $req->request->get('code');
|
|
||||||
|
|
||||||
// code is wrong
|
// code is wrong
|
||||||
if ($sess->getConfirmCode() != $code)
|
$code = $req->request->get('code');
|
||||||
|
if ($this->session->getConfirmCode() != $code)
|
||||||
{
|
{
|
||||||
$res->setErrorFlag(true)
|
$res->setError(true)
|
||||||
->setErrorMessage('Wrong confirm code');
|
->setErrorMessage('Wrong confirm code');
|
||||||
return $this->json($res->getReturnResponse());
|
return $this->json($res->getReturnResponse());
|
||||||
}
|
}
|
||||||
|
|
||||||
// set confirm date
|
// set confirm date
|
||||||
$date = new DateTime();
|
$date = new DateTime();
|
||||||
$sess->setDateConfirmed($date)
|
$this->session->setDateConfirmed($date)
|
||||||
->setConfirmed();
|
->setConfirmed();
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class APIResult
|
||||||
$this->data = [];
|
$this->data = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setErrorFlag($flag = true)
|
public function setError($flag = true)
|
||||||
{
|
{
|
||||||
$this->err_flag = $flag;
|
$this->err_flag = $flag;
|
||||||
return $this;
|
return $this;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue