'\d+'])] #[IsGranted('IS_AUTHENTICATED_FULLY')] class MailMessageReadController extends AbstractController { public function __construct( private readonly MailMessageRepository $messageRepository, private readonly MailProviderInterface $mailProvider, private readonly EntityManagerInterface $em, private readonly MailAccessChecker $accessChecker, ) {} public function __invoke(Request $request, int $id): JsonResponse { $this->accessChecker->ensureCanAccessMail($this->getUser()); $message = $this->messageRepository->find($id); if (null === $message) { throw new NotFoundHttpException('Message not found'); } $body = json_decode($request->getContent(), true); $read = (bool) ($body['read'] ?? true); try { $this->mailProvider->markRead($message->getFolder()->getPath(), $message->getUid(), $read); } catch (MailProviderException) { // Non bloquant : on met quand meme a jour la BDD (sync IMAP au prochain cycle) } $message->setIsRead($read); $this->em->flush(); return $this->json(['id' => $message->getId(), 'isRead' => $message->isRead()]); } }