Files
KanbanGit/app/Actions/Notifications/BuildTicketCreatedPayload.php
Koda 61505ace23
linter / quality (pull_request) Successful in 1m17s
tests / ci (8.4) (pull_request) Failing after 1m35s
Refactor notification event payloads and listener naming
2026-04-25 21:54:42 +00:00

47 lines
1.3 KiB
PHP

<?php
namespace App\Actions\Notifications;
use App\Models\Project;
use App\Models\Ticket;
use App\Models\TicketStatus;
use App\Models\User;
use Carbon\CarbonImmutable;
class BuildTicketCreatedPayload
{
public function handle(
Project $project,
Ticket $ticket,
TicketStatus $ticketStatus,
?User $actor,
CarbonImmutable $occurredAt,
): TicketCreatedPayload {
return new TicketCreatedPayload(
projectId: $project->id,
projectKey: $project->key,
projectName: $project->name,
ticketId: $ticket->id,
ticketKey: $ticket->ticket_key,
ticketTitle: $ticket->title,
ticketUrl: route('projects.tickets.show', [$project, $ticket]),
actorId: $actor?->id,
actorName: $actor?->name,
toStatusId: $ticketStatus->id,
toStatusLabel: $this->statusLabel($ticketStatus),
occurredAt: $occurredAt,
);
}
private function statusLabel(TicketStatus $ticketStatus): string
{
$ticketStatus->loadMissing('boardColumn');
if ($ticketStatus->boardColumn === null || $ticketStatus->boardColumn->name === $ticketStatus->name) {
return $ticketStatus->name;
}
return "{$ticketStatus->boardColumn->name} / {$ticketStatus->name}";
}
}