feat(tickets): implement AdminAppTicketResource and update ticket collection to use it

This commit is contained in:
2026-08-28 15:17:35 -03:00
parent 4ba464bf85
commit df853de843
3 changed files with 120 additions and 6 deletions

View File

@@ -2,15 +2,14 @@
namespace App\Domains\Ticket\Resources\AdminApp;
use App\Domains\Ticket\Resources\TicketResource;
use App\Domains\Ticket\Services\AdminAppTicketResult;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
class AdminAppTicketCollection extends ResourceCollection
{
/** @var class-string<TicketResource> */
public $collects = TicketResource::class;
/** @var class-string<AdminAppTicketResource> */
public $collects = AdminAppTicketResource::class;
private readonly int $scannedTickets;

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Domains\Ticket\Resources\AdminApp;
use App\Domains\Catalog\Models\ItemAttribute;
use App\Domains\Ticket\Models\Ticket;
use App\Domains\Ticket\Resources\TicketResource;
use Illuminate\Http\Request;
/** @mixin Ticket */
class AdminAppTicketResource extends TicketResource
{
/** @return array<string, mixed> */
public function toArray(Request $request): array
{
return [
...parent::toArray($request),
'variant_properties' => $this->variantProperties(),
];
}
/**
* @return list<array{
* code: string,
* label: string,
* values: list<array{value: string, label: string}>
* }>
*/
private function variantProperties(): array
{
$variant = $this->sourceVariant;
if ($variant === null) {
return [];
}
$itemAttributes = $variant->definitions
->map(fn ($definition) => $definition->itemAttribute)
->filter()
->merge($variant->catalogItem?->itemAttributes ?? collect())
->unique('id')
->values();
return $variant->selectionOptions($itemAttributes)
->map(function (array $selection, string $attributeCode) use ($itemAttributes): array {
$itemAttribute = $itemAttributes->first(
fn (ItemAttribute $itemAttribute): bool => $itemAttribute->attribute?->codigo
=== $attributeCode,
);
$values = array_is_list($selection) ? $selection : [$selection];
return [
'code' => $attributeCode,
'label' => $itemAttribute?->attribute?->nombre
?? ($attributeCode === 'event_date' ? 'Fecha' : $attributeCode),
'values' => array_values($values),
];
})
->values()
->all();
}
}