Extract business logic from remaining models to services

New services:
- ExchangeRateProviderService: CRUD, API status checks, currency converter
  URL resolution (extracted 122 lines from ExchangeRateProvider model)
- FileDiskService: create, update, setAsDefault, validateCredentials
  (extracted 97 lines from FileDisk model)
- ItemService: create/update with tax handling (extracted from Item model)
- TransactionService: create/complete/fail (extracted from Transaction model)
- CustomFieldService: create/update with slug generation (extracted from
  CustomField model)

Controllers updated to use constructor-injected services:
ExchangeRateProviderController, DiskController, ItemsController,
CustomFieldsController.
This commit is contained in:
Darko Gjorgjijoski
2026-04-03 19:32:37 +02:00
parent ece6ce737b
commit 8f29e8f5de
9 changed files with 343 additions and 15 deletions

View File

@@ -6,11 +6,16 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\CustomFieldRequest;
use App\Http\Resources\CustomFieldResource;
use App\Models\CustomField;
use App\Services\CustomFieldService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CustomFieldsController extends Controller
{
public function __construct(
private readonly CustomFieldService $customFieldService,
) {}
/**
* Display a listing of the resource.
*
@@ -40,7 +45,7 @@ class CustomFieldsController extends Controller
{
$this->authorize('create', CustomField::class);
$customField = CustomField::createCustomField($request);
$customField = $this->customFieldService->create($request);
return new CustomFieldResource($customField);
}
@@ -69,7 +74,7 @@ class CustomFieldsController extends Controller
{
$this->authorize('update', $customField);
$customField->updateCustomField($request);
$this->customFieldService->update($customField, $request);
return new CustomFieldResource($customField);
}