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

@@ -0,0 +1,28 @@
<?php
namespace App\Services;
use App\Models\CustomField;
use Illuminate\Http\Request;
class CustomFieldService
{
public function create(Request $request): CustomField
{
$data = $request->validated();
$data[getCustomFieldValueKey($request->type)] = $request->default_answer;
$data['company_id'] = $request->header('company');
$data['slug'] = clean_slug($request->model_type, $request->name);
return CustomField::create($data);
}
public function update(CustomField $customField, Request $request): CustomField
{
$data = $request->validated();
$data[getCustomFieldValueKey($request->type)] = $request->default_answer;
$customField->update($data);
return $customField;
}
}