*/ 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); } }