src/ApplicationBundle/Modules/Api/Controller/ActivityLogController.php line 16

Open in your IDE?
  1. <?php
  2. namespace ApplicationBundle\Modules\Api\Controller;
  3. use ApplicationBundle\Controller\GenericController;
  4. use ApplicationBundle\Modules\Api\Service\ActivityLogService;
  5. use InvalidArgumentException;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. class ActivityLogController extends GenericController
  9. {
  10.     public function logAction(Request $request): JsonResponse
  11.     {
  12.         $payload $this->extractPayload($request);
  13.         $service = new ActivityLogService($this->getDoctrine()->getManager());
  14.         try {
  15.             $activityLog $service->log($payload);
  16.         } catch (InvalidArgumentException $exception) {
  17.             return new JsonResponse([
  18.                 'success' => false,
  19.                 'code' => 'HB_VALIDATION_ERROR',
  20.                 'message' => 'Validation failed',
  21.                 'errors' => [$exception->getMessage()],
  22.             ], 400);
  23.         } catch (\Throwable $exception) {
  24.             return new JsonResponse([
  25.                 'success' => false,
  26.                 'code' => 'HB_INTERNAL_ERROR',
  27.                 'message' => 'Activity log could not be saved',
  28.             ], 500);
  29.         }
  30.         return new JsonResponse([
  31.             'success' => true,
  32.             'code' => 'HB_OK',
  33.             'message' => 'Activity logged successfully',
  34.             'data' => [
  35.                 'id' => $activityLog->getId(),
  36.                 'user_id' => $activityLog->getUserId(),
  37.                 'session_id' => $activityLog->getSessionId(),
  38.                 'route' => $activityLog->getRoute(),
  39.                 'action_type' => $activityLog->getActionType(),
  40.                 'duration_seconds' => $activityLog->getDurationSeconds(),
  41.                 'created_at' => $activityLog->getCreatedAt() ? $activityLog->getCreatedAt()->format('Y-m-d H:i:s') : null,
  42.             ],
  43.         ], 201);
  44.     }
  45.     private function extractPayload(Request $request): array
  46.     {
  47.         $contentType strtolower((string) $request->headers->get('Content-Type'''));
  48.         $rawContent trim((string) $request->getContent());
  49.         if ($rawContent !== '' && strpos($contentType'application/json') !== false) {
  50.             $decoded json_decode($rawContenttrue);
  51.             return is_array($decoded) ? $decoded : [];
  52.         }
  53.         return $request->request->all();
  54.     }
  55. }