android-automate-api/src/App/Controller/SmsController.php

126 lines
3 KiB
PHP

<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
/**
* class SmsController.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class SmsController extends Controller
{
/**
* {@inheritdoc}
*/
public function registerRoutes()
{
$this->app
->post('/api/sms/create', [$this, 'create'])
->bind('api_sms_create');
$this->app
->delete('/api/sms/delete/{id}', [$this, 'delete'])
->bind('api_sms_delete')
->assert('id', '\d+')
->convert('id', function ($value) {
return (int) $value;
});
$this->app
->get('/api/sms/list', [$this, 'list'])
->bind('api_sms_list');
}
/**
* Create action.
*
* @param Request $request
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function create(Request $request)
{
$app = $this->app;
if (!$app['sms.validator']->validateRequest($request)) {
return $app->abort(422, 'Invalid request.');
}
$persisted = $app['sms.factory']->createByRequest($request);
if (!$persisted) {
return $app->abort(500, 'An error occured.');
} else {
return $app->json([
'status' => true,
'code' => 201,
'message' => 'Resource created.',
], 201);
}
}
/**
* Delete action.
*
* @param Request $request
* @param int $id
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function delete(Request $request, $id)
{
$app = $this->app;
$object = $app['sms.factory']->get($id);
if (!$object) {
return $app->json([
'status' => false,
'code' => 404,
'message' => 'Resource not found.',
], 404);
}
$app['sms.factory']->remove($object);
return $app->json([
'status' => true,
'code' => 204,
'message' => 'Resource removed.',
], 204);
}
/**
* List action.
*
* @param Request $request
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function list()
{
$app = $this->app;
$objects = $app['sms.factory']->getAll()->getData();
$data = [];
foreach ($objects as $object) {
$data[] = [
'id' => $object->getId(),
'sender' => $object->getSender(),
'message' => $object->getMessage(),
'received_at' => (int) $object->getTime(),
'notified_at' => $object->getCreatedAt()->getTimestamp(),
];
}
return $app->json($data);
}
}