<?php
namespace App\Controller;
use App\Entity\Sms;
use App\Entity\WayBill;
use App\Messages\SMSMessage;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Annotation\Route;
class SmsController extends AbstractController {
private ObjectManager $em;
private LoggerInterface $logger;
public function __construct(ManagerRegistry $managerRegistry, LoggerInterface $logger, MessageBusInterface $messageBus){
$this->logger = $logger;
$this->em = $managerRegistry->getManager();
$this->messageBus = $messageBus;
}
#[Route('/sms/callback', name: 'app_sms_smscallback')]
function smsCallback(Request $request): Response {
$messageId = $request->get('id');
$status = $request->get('status');
if($messageId){
$sms = $this->em->getRepository(Sms::class)->findOneBy([
'messageId' => $messageId
]);
$sms->setStatus($status);
$this->em->flush();
}
return new Response('OK', Response::HTTP_OK);
}
#[Route('/sms/send_unsent', name: 'app_sms_smscallback_')]
function smsUnsent(Request $request): Response
{
$failedDeliveryNotifications = $this->em->getRepository(WayBill::class)->findFailedSmsByInserficient();
$smses =[];
foreach ($failedDeliveryNotifications as $index => $failedDeliveryNotification) {
$this->messageBus->dispatch(new SMSMessage($failedDeliveryNotification['id']));
}
$smsMessages = json_encode($smses);
return new Response($smsMessages, Response::HTTP_OK);
}
}