*/ final readonly class TicketStatusChangedPayload implements Arrayable { public function __construct( public NotificationEventType $eventType, public int $projectId, public string $projectKey, public string $projectName, public int $ticketId, public string $ticketKey, public string $ticketTitle, public string $ticketUrl, public ?int $actorId, public ?string $actorName, public int $fromStatusId, public string $fromStatusLabel, public int $toStatusId, public string $toStatusLabel, public CarbonImmutable $occurredAt, ) {} /** * @return array{ * event_type: string, * project: array{id: int, key: string, name: string}, * ticket: array{id: int, key: string, title: string}, * actor: array{id: int, name: string}|null, * from: array{id: int, label: string}, * to: array{id: int, label: string}, * ticket_url: string, * occurred_at: string * } */ public function toArray(): array { return [ 'event_type' => $this->eventType->value, 'project' => [ 'id' => $this->projectId, 'key' => $this->projectKey, 'name' => $this->projectName, ], 'ticket' => [ 'id' => $this->ticketId, 'key' => $this->ticketKey, 'title' => $this->ticketTitle, ], 'actor' => $this->actorId === null || $this->actorName === null ? null : [ 'id' => $this->actorId, 'name' => $this->actorName, ], 'from' => [ 'id' => $this->fromStatusId, 'label' => $this->fromStatusLabel, ], 'to' => [ 'id' => $this->toStatusId, 'label' => $this->toStatusLabel, ], 'ticket_url' => $this->ticketUrl, 'occurred_at' => $this->occurredAt->toISOString(), ]; } }