refactor(backend): reorganize domains into Core, Commerce, Ticketing and Shared

This commit is contained in:
2026-09-18 10:14:02 -03:00
parent 4659c1049d
commit 1241e1f7e8
425 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
<?php
namespace App\Domains\Sale\Resources\AdminApp;
use App\Domains\Purchase\Models\Purchase;
use App\Domains\Purchase\Models\PurchaseItem;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin Purchase */
class SaleDetailResource extends JsonResource
{
/** @return array<string, mixed> */
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'items' => $this->items->map(fn (PurchaseItem $item): array => [
'id' => $item->id,
'product' => $item->item_nombre,
'event_dates' => $this->eventDates($item),
'quantity' => (int) $item->cantidad,
'unit_price' => $this->formatMoney($item->precio_unitario),
'total' => $this->formatMoney($item->total),
])->values(),
'total' => $this->formatMoney($this->total),
];
}
/** @return list<string> */
private function eventDates(PurchaseItem $item): array
{
return collect($item->variant_attributes ?? [])
->filter(fn (mixed $attribute): bool => is_array($attribute)
&& mb_strtolower(trim((string) ($attribute['name'] ?? ''))) === 'fecha')
->flatMap(function (array $attribute): array {
$value = $attribute['value'] ?? [];
return is_array($value) ? $value : [$value];
})
->filter(fn (mixed $date): bool => is_string($date) && $date !== '')
->values()
->all();
}
private function formatMoney(float|int|string|null $amount): string
{
return number_format((float) ($amount ?? 0), 2, '.', '');
}
}

View File

@@ -0,0 +1,50 @@
<?php
namespace App\Domains\Sale\Resources\AdminApp;
use App\Domains\Logging\Models\ValueChange;
use App\Domains\Purchase\Models\Purchase;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin ValueChange */
class SaleModificationResource extends JsonResource
{
/** @return array<string, mixed> */
public function toArray(Request $request): array
{
/** @var Purchase|null $sale */
$sale = $this->whenLoaded('trackable');
$user = $this->whenLoaded('user');
return [
'id' => $this->id,
'sale_id' => $this->trackable_id,
'attribute' => $this->attribute,
'old_value' => $this->old_value,
'new_value' => $this->new_value,
'admin_status' => is_string($this->new_value)
? Purchase::adminStatusFor($this->new_value)
: null,
'status_label' => is_string($this->new_value)
? Purchase::adminStatusNameFor($this->new_value)
: null,
'changed_at' => $this->changed_at->utc()->toIso8601String(),
'date' => $this->changed_at->format('Y-m-d'),
'time' => $this->changed_at->format('H:i:s'),
'actor_type' => $this->actor_type->value,
'sale' => $sale instanceof Purchase ? [
'id' => $sale->id,
'customer_name' => $sale->nombre_apellido,
'status' => $sale->status,
'admin_status' => Purchase::adminStatusFor($sale->status),
'status_label' => Purchase::adminStatusNameFor($sale->status),
] : null,
'modified_by' => $user ? [
'id' => $user->id,
'name' => $user->nombre_apellido,
'email' => $user->email,
] : null,
];
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Domains\Sale\Resources\AdminApp;
use App\Domains\Purchase\Models\Purchase;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin Purchase */
class SaleResource extends JsonResource
{
/** @return array<string, mixed> */
public function toArray(Request $request): array
{
$ticketsCount = (int) ($this->tickets_count ?? 0);
return [
'id' => $this->id,
'created_at' => $this->created_at,
'customer_name' => $this->nombre_apellido,
'quantity' => (int) ($this->quantity ?? 0),
'status' => $this->status,
'admin_status' => Purchase::adminStatusFor($this->status),
'status_label' => Purchase::adminStatusNameFor($this->status),
'total' => number_format((float) $this->total, 2, '.', ''),
'tickets_count' => $ticketsCount,
'has_generated_tickets' => $ticketsCount > 0,
];
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Domains\Sale\Resources\AdminApp;
use App\Domains\Ticket\Models\Ticket;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/** @mixin Ticket */
class SaleTicketResource extends JsonResource
{
/** @return array<string, mixed> */
public function toArray(Request $request): array
{
return [
'product' => $this->name,
'id' => $this->id,
'expires_at' => $this->getEffectiveExpiresAt(),
'status' => $this->status,
'status_label' => $this->status_label,
];
}
}