Files
KanbanGit/app/Http/Resources/TicketLinkResource.php
T
Koda 486994e441
linter / quality (pull_request) Successful in 3m5s
tests / ci (8.4) (pull_request) Failing after 1m41s
Model ticket link counterparts explicitly
2026-05-23 10:29:22 +00:00

52 lines
2.1 KiB
PHP

<?php
namespace App\Http\Resources;
use App\Models\TicketLink;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Arr;
class TicketLinkResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
if ($this->resource instanceof TicketLink) {
$currentTicketId = (int) ($this->resource->getAttribute('current_ticket_id') ?? 0);
$isSourceTicket = $this->source_ticket_id === $currentTicketId;
$linkedTicket = $isSourceTicket
? $this->targetTicket
: $this->sourceTicket;
$ticketLinkType = TicketLinkTypeResource::make($this->ticketLinkType)->resolve();
$ticketLinkType['label'] = $this->ticketLinkType->labelForSource($isSourceTicket);
return [
'id' => $this->id,
'linked_ticket' => TicketReferenceResource::make($linkedTicket)->resolve(),
'source_ticket_id' => $this->source_ticket_id,
'target_ticket_id' => $this->target_ticket_id,
'ticket_link_type' => $ticketLinkType,
'ticket_link_type_id' => $this->ticket_link_type_id,
'created_at' => $this->created_at?->toISOString(),
'updated_at' => $this->updated_at?->toISOString(),
];
}
return [
'id' => Arr::get($this->resource, 'id'),
'linked_ticket' => TicketReferenceResource::make(Arr::get($this->resource, 'linked_ticket'))->resolve(),
'source_ticket_id' => Arr::get($this->resource, 'source_ticket_id'),
'target_ticket_id' => Arr::get($this->resource, 'target_ticket_id'),
'ticket_link_type' => TicketLinkTypeResource::make(Arr::get($this->resource, 'ticket_link_type'))->resolve(),
'ticket_link_type_id' => Arr::get($this->resource, 'ticket_link_type_id'),
'created_at' => Arr::get($this->resource, 'created_at'),
'updated_at' => Arr::get($this->resource, 'updated_at'),
];
}
}