From bd9b7cd32e056006e7463ca925a7236ea8715c4b Mon Sep 17 00:00:00 2001 From: Jeremy Munsch Date: Fri, 26 Jun 2026 15:13:48 +0200 Subject: [PATCH] fix: new ticket creation failed --- app/Events/TicketCreated.php | 34 +++++++++++++++++ app/Http/Controllers/Bo/TicketController.php | 19 ++++++---- app/Listeners/CreateTicketAutomatically.php | 25 +++++------- app/Listeners/SendNotificationMailToAdmin.php | 38 +++++++++++++++++-- 4 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 app/Events/TicketCreated.php diff --git a/app/Events/TicketCreated.php b/app/Events/TicketCreated.php new file mode 100644 index 0000000..1da96f7 --- /dev/null +++ b/app/Events/TicketCreated.php @@ -0,0 +1,34 @@ + + */ + public function broadcastOn(): array + { + return [ + new PrivateChannel('default'), + ]; + } +} diff --git a/app/Http/Controllers/Bo/TicketController.php b/app/Http/Controllers/Bo/TicketController.php index 1cdbf14..131bad4 100644 --- a/app/Http/Controllers/Bo/TicketController.php +++ b/app/Http/Controllers/Bo/TicketController.php @@ -24,6 +24,7 @@ use App\Http\Requests\Bo\StoreTicket; use App\Http\Requests\Bo\UpdateTicket; use App\Lib\Helpers\FileStorageHelper; use App\Enums\Tickets\TicketStatusEnum; +use App\Events\TicketCreated; use App\Http\Requests\Bo\CreateMessage; use App\Http\Requests\Bo\UpdateMessage; use Illuminate\Support\Facades\Session; @@ -33,14 +34,16 @@ use App\Http\Requests\Bo\ChangeTicketStatus; use App\Http\Requests\Bo\UpdateChangeOrderRequest; use App\Http\Requests\Bo\AssignTicketToUserRequest; use App\Http\Requests\Bo\UpdateTicketPriorityRequest; +use Illuminate\Contracts\Events\Dispatcher; class TicketController extends Controller { /** * TicketController */ - public function __construct() - { + public function __construct( + public readonly Dispatcher $dispatcher + ) { parent::__construct(); $this->authorizeResource(Ticket::class, 'ticket'); } @@ -213,7 +216,7 @@ class TicketController extends Controller } } - $ticket->user()->associate(auth()->user()); + $ticket->user()->associate($user); $ticket->site()->associate($site); $ticket->saveOrFail(); @@ -223,11 +226,11 @@ class TicketController extends Controller $user->subscriptions()->toggle($ticket->id); - if (config('mail.MAIL_ADMIN')) { - Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); - } else { - throw new \ErrorException('Missing MAIL_ADMIN in .env'); - } + $this->dispatcher->dispatch(new TicketCreated( + siteReceivingTicket: $site, + ticket: $ticket, + byUserName: $user->name + )); return redirect()->route('bo.ticket.show', $ticket) ->with('success', trans('Ticket enregistré !')); diff --git a/app/Listeners/CreateTicketAutomatically.php b/app/Listeners/CreateTicketAutomatically.php index 880affa..3aac3ff 100644 --- a/app/Listeners/CreateTicketAutomatically.php +++ b/app/Listeners/CreateTicketAutomatically.php @@ -3,10 +3,12 @@ namespace App\Listeners; use App\Events\BrevoWebhookCallReceived; +use App\Events\TicketCreated; use App\Mail\NewTicket; use App\Repositories\SiteRepository; use App\Services\AutomaticTicketCreator; use Domain\Models\ValueObjects\Email; +use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Mail; @@ -17,17 +19,12 @@ class CreateTicketAutomatically implements ShouldQueue { private const string SITE_NAME_WHERE_TO_CREATE_TICKET = 'Mailing en masse'; - private readonly Email $mailAdmin; - public function __construct( private readonly LoggerInterface $logger, private readonly AutomaticTicketCreator $automaticTicketCreator, private readonly SiteRepository $siteRepository, - ) { - $this->mailAdmin = new Email( - Config::string('mail.MAIL_ADMIN') - ); - } + private readonly Dispatcher $dispatcher + ) {} public function handle(BrevoWebhookCallReceived $event): void { @@ -69,14 +66,10 @@ class CreateTicketAutomatically implements ShouldQueue $htmlRawContent, ); - Mail::to($this->mailAdmin->value) - ->send(new NewTicket( - ticketId: $ticket->id, - siteName: $siteReceivingTickets->name, - ticketTitle: $ticket->title, - ticketType: $ticket->type, - userName: $fromEmail->value, - ticketDescription: $ticket->text, - )); + $this->dispatcher->dispatch(new TicketCreated( + siteReceivingTicket: $siteReceivingTickets, + ticket: $ticket, + byUserName: $fromEmail->value + )); } } diff --git a/app/Listeners/SendNotificationMailToAdmin.php b/app/Listeners/SendNotificationMailToAdmin.php index 8498763..5eeddab 100644 --- a/app/Listeners/SendNotificationMailToAdmin.php +++ b/app/Listeners/SendNotificationMailToAdmin.php @@ -3,21 +3,51 @@ namespace App\Listeners; use App\Events\NotifyAdmin; +use App\Events\TicketCreated; +use App\Mail\NewTicket; use App\Mail\TicketUpdate; +use Domain\Models\ValueObjects\Email; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Mail; class SendNotificationMailToAdmin { + private readonly Email $mailAdmin; + + public function __construct() + { + $this->mailAdmin = new Email( + Config::string('mail.MAIL_ADMIN') + ); + } + /** * Handle the event. * * @param \App\Events\NotifyAdmin $event * @return void */ - public function handle(NotifyAdmin $event) + public function handle(NotifyAdmin | TicketCreated $event) { - $ticket = $event->ticket; - Mail::to(config('mail.MAIL_ADMIN')) - ->send(new TicketUpdate($ticket, $event->corpsMaj)); + if ($event instanceof NotifyAdmin) { + $ticket = $event->ticket; + Mail::to($this->mailAdmin) + ->send(new TicketUpdate($ticket, $event->corpsMaj)); + } + if ($event instanceof TicketCreated) { + $ticket = $event->ticket; + $siteReceivingTickets = $event->siteReceivingTicket; + $userName = $event->byUserName; + + Mail::to($this->mailAdmin->value) + ->send(new NewTicket( + ticketId: $ticket->id, + siteName: $siteReceivingTickets->name, + ticketTitle: $ticket->title, + ticketType: $ticket->type, + userName: $userName, + ticketDescription: $ticket->text, + )); + } } }