- Replace SaleService with CreateSaleCommand and CreateSaleAction for better separation of concerns - Move sale creation logic into dedicated command class following command pattern - Update CreateSale.php to use new action instead of direct service call - Wrap sale creation in database transaction for data consistency
28 lines
708 B
PHP
28 lines
708 B
PHP
<?php
|
|
|
|
namespace App\Commands\Sales;
|
|
|
|
use App\Commands\Command;
|
|
use App\DataObjects\CreateSaleDTO;
|
|
use App\Models\Sale;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class CreateSaleCommand implements Command
|
|
{
|
|
public function execute(array $data): Sale
|
|
{
|
|
return DB::transaction(function () use ($data, &$sale) {
|
|
$tData = new CreateSaleDTO(
|
|
reference_number: $data['current_series'],
|
|
happened_on: \Carbon\Carbon::parse($data['happened_on']),
|
|
branch_id: $data['branch_id'],
|
|
user_id: Auth::user()->id,
|
|
);
|
|
|
|
return Sale::create($tData->toArray());
|
|
});
|
|
|
|
}
|
|
}
|