src/Controller/Mailbox/MailboxController.php line 151

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mailbox;
  3. use App\Constant\Mailbox\SectionConstant;
  4. use App\Serializer\Mailbox\EmailNormalizerInterface;
  5. use App\Service\Mailbox\MailboxService;
  6. use App\Service\Mailbox\RealtimeApi\RealtimeUpdateInterface;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class MailboxController extends AbstractController
  13. {
  14.     private $mailboxService;
  15.     private $normalizer;
  16.     private $realtimeUpdate;
  17.     public function __construct(
  18.         MailboxService $mailboxService,
  19.         EmailNormalizerInterface $normalizer,
  20.         RealtimeUpdateInterface $realtimeUpdate
  21.     ) {
  22.         $this->mailboxService $mailboxService;
  23.         $this->normalizer $normalizer;
  24.         $this->realtimeUpdate $realtimeUpdate;
  25.     }
  26.     /**
  27.      * @Route("/api/immo/v2/mailbox/emails", methods={"GET"})
  28.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  29.      * @param Request $request
  30.      * @return JsonResponse
  31.      */
  32.     public function emails(Request $request): JsonResponse
  33.     {
  34.         $user $this->getUser();
  35.         $userId $user->getId();
  36.         $category $request->query->get('category''all');
  37.         $received $request->query->getBoolean('received');
  38.         $page $request->query->getInt('page'1);
  39.         $itemsPerPage $request->query->getInt('itemsPerPage'10);
  40.         $section $request->query->get('section'SectionConstant::PRIVATE);
  41.         $count $this->mailboxService->count($userId$category$received$section);
  42.         $data $this->mailboxService->getList(
  43.             $userId,
  44.             $category,
  45.             $received,
  46.             $page,
  47.             $itemsPerPage,
  48.             $section,
  49.             $user->getInboxId(),
  50.             $user->getEmail()
  51.         );
  52.         return new JsonResponse([
  53.             'data' => $this->normalizer->normalizeArray(
  54.                 $data,
  55.                 [
  56.                     'received' => $request->query->getBoolean('received'),
  57.                     'currentUserId' => $this->getUser()->getId(),
  58.                 ]
  59.             ),
  60.             'success' => true,
  61.             'message' => 'Email list',
  62.             'total' => $count,
  63.             'last_page' => ceil($count $itemsPerPage),
  64.             'current_page' => $page,
  65.         ]);
  66.     }
  67.     /**
  68.      * @Route("/api/immo/v2/mailbox/email", methods={"GET"})
  69.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  70.      * @param Request $request
  71.      * @return JsonResponse
  72.      */
  73.     public function details(Request $request): JsonResponse
  74.     {
  75.         return new JsonResponse([
  76.             'data' => $this->normalizer->normalizeDetails(
  77.                 $this->mailboxService->getDetails(
  78.                     $request->query->getInt('emailId'),
  79.                     $this->getUser()->getId()
  80.                 ),
  81.                 [
  82.                     'received' => $request->query->getBoolean('received'),
  83.                     'currentUserId' => $this->getUser()->getId(),
  84.                 ]
  85.             ),
  86.             'success' => true,
  87.             'message' => 'Email list'
  88.         ]);
  89.     }
  90.     /**
  91.      * @Route("/api/immo/v2/mailbox/email/send", methods={"POST"})
  92.      * @param Request $request
  93.      * @return JsonResponse
  94.      */
  95.     public function post(Request $request): JsonResponse
  96.     {
  97.         $emailToReplyId $request->request->getInt('emailId'0);
  98.         $email $this->mailboxService->send(
  99.             $this->getUser() ? $this->getUser()->getEmail() : $_ENV['ADMIN_EMAIL'],
  100.             $request->request->get('to'''),
  101.             $request->request->get('category'),
  102.             $request->request->get('body'),
  103.             $emailToReplyId,
  104.             $request->files->get('documents', []),
  105.             [
  106.                 'mailSubject' => $request->request->get('subject'null),
  107.                 'senderType' => $request->request->get('senderType'SectionConstant::PRIVATE),
  108.                 'receiverType' => $request->request->get('receiverType'SectionConstant::PRIVATE),
  109.             ]
  110.         );
  111.         if ($emailToReplyId 0) {
  112.             $data $this->normalizer->normalizeReply($email);
  113.         } else {
  114.             $data $this->normalizer->normalize(
  115.                 $email,
  116.                 [ 'received' => false'currentUserId' => $this->getUser() ? $this->getUser()->getId() : null ]
  117.             );
  118.         }
  119.         $emailData $email->getEmailToReply() ? $email->getEmailToReply() : $email;
  120.         $emailData->setDate($email->getDate());
  121.         $this->realtimeUpdate->realtimeUpdate(
  122.             json_encode(
  123.                 $this->normalizer->normalize($emailData, [
  124.                     'received' => true,
  125.                     'currentUserId' => $email->getReceiver()->getId(),
  126.                     'withoutReplies' => true,
  127.                 ])
  128.             ),
  129.             ['userId' => 'email/' $email->getReceiver()->getId()]
  130.         );
  131.         return new JsonResponse(
  132.             [
  133.             'data' => $data,
  134.             'success' => true,
  135.             'message' => 'Email sended'
  136.             ]
  137.         );
  138.     }
  139.     /**
  140.      * @Route("/api/immo/v2/mailbox/email/count", methods={"GET"})
  141.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  142.      * @param Request $request
  143.      * @return JsonResponse
  144.      */
  145.     public function count(Request $request): JsonResponse
  146.     {
  147.         $section $request->query->get('section');
  148.         return new JsonResponse([
  149.             'data' => $this->mailboxService->getNumberOfUnreadMessages(
  150.                 $this->getUser()->getId(),
  151.                 $section
  152.             ),
  153.             'success' => true,
  154.             'message' => 'Total of email not seen'
  155.         ]);
  156.     }
  157.     /**
  158.      * @Route("/api/immo/v2/mailbox/email/delete", methods={"DELETE"})
  159.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  160.      * @param Request $request
  161.      * @return JsonResponse
  162.      */
  163.     public function delete(Request $request): JsonResponse
  164.     {
  165.         $email $this->mailboxService->getOne($request->query->getInt('emailId'0));
  166.         $this->mailboxService->markDelete(
  167.             $email,
  168.             $email->getReceiver()->getId() === $this->getUser()->getId()
  169.         );
  170.         $this->realtimeUpdate->realtimeUpdate(
  171.             json_encode($this->mailboxService->getNumberOfUnreadMessages($this->getUser()->getId())),
  172.             ['userId' => $this->getUser()->getId()]
  173.         );
  174.         return new JsonResponse([
  175.             'data' => [],
  176.             'success' => true,
  177.             'message' => 'Email deleted successfully'
  178.         ]);
  179.     }
  180. }