src/Controller/flutter/ChatController.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Controller\flutter;
  3. use App\Repository\ChatMessageRepository;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. class ChatController extends AbstractController
  9. {
  10.     /**
  11.      * @Route("/chatmessages", name="api_chat_messages", methods={"GET"})
  12.      */
  13.     public function getMessages(Request $requestChatMessageRepository $repository): JsonResponse
  14.     {
  15.         // 1. Récupération des Query Parameters envoyés par Flutter
  16.         $customerCode $request->query->get('customerCode');
  17.         $lastId $request->query->get('lastId');
  18.         // Validation de la présence du code client
  19.         if (!$customerCode) {
  20.             return new JsonResponse([
  21.                 'error' => 'Le paramètre customerCode est requis pour le filtrage.'
  22.             ], 400);
  23.         }
  24.         // 2. Sélection de la stratégie de récupération (Incrémentale ou Historique complet)
  25.         if ($lastId !== null && is_numeric($lastId)) {
  26.             // Récupère uniquement les messages reçus APRÈS cet ID
  27.             $messages $repository->findNewMessages($customerCode, (int) $lastId);
  28.         } else {
  29.             // Premier chargement : récupère tout l'historique du client
  30.             $messages $repository->findByCustomerCode($customerCode);
  31.         }
  32.         // 3. Formatage de la réponse pour correspondre exactement à l'objet Dart Flutter
  33.         $data = [];
  34.         foreach ($messages as $message) {
  35.             $data[] = [
  36.                 'id' => (string) $message->getId(), // Forcé en String pour correspondre au modèle Dart
  37.                 'content' => $message->getContent(),
  38.                 'fileName' => $message->getFileName(),
  39.                 'fileSize' => $message->getFileSize(),
  40.                 'pdfUrl' => $message->getPdfUrl(),
  41.                 // Format ISO 8601 standard (ex: 2026-05-23T14:32:00+02:00) pour DateTime.parse()
  42.                 'timestamp' => $message->getTimestamp()->format(\DateTime::ATOM),
  43.                 'isMe' => $message->isMe(),
  44.                 'type' => $message->getType(), // Retourne 'text' ou 'pdf'
  45.                 'managerName' => $message->getManagerName(),
  46.                 'managerContact' => $message->getManagerContact(),
  47.                 'comment' => $message->getComment(),
  48.                 'customerCode' => $message->getCustomerCode(),
  49.             ];
  50.         }
  51.         // 4. Envoi de la réponse structurée avec les en-têtes JSON appropriés
  52.         return new JsonResponse($data200, [
  53.             'Content-Type' => 'application/json',
  54.             'Access-Control-Allow-Origin' => '*' // Utile si vous testez sur un navigateur / Webview
  55.         ]);
  56.     }
  57. }