File: /var/www/ipsremont-demo/app/Services/Device/DeviceService.php
<?php
namespace App\Services\Device;
use App\Http\Requests\DeleteRequest;
use App\Http\Requests\Device\CreateRequest;
use App\Http\Requests\Device\IndexRequest;
use App\Models\Device;
use App\Repository\Device\DeviceRepository;
use App\Services\ImportService;
use Illuminate\Support\Facades\Validator;
class DeviceService
{
protected DeviceRepository $repository;
public function __construct()
{
$this->repository = new DeviceRepository();
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function search(IndexRequest $request)
{
return $this->repository->search($request);
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function searchDevicesAjax($term)
{
return $this->repository->searchDevicesAjax($term)->get(['text', 'id'])->toArray();
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function search_specifications(IndexRequest $request)
{
return $this->repository->search_specifications($request);
}
/**
* @param $request
*
* @return mixed
*/
public function getDevice($request)
{
return $this->repository->getDevice($request);
}
public static function getManufacturer($device)
{
if (stripos($device->name, '//')) {
$manufacturer = str_replace('//', '', stristr($device->name, '//'));
} else {
$arr = explode(' ', $device->name);
$manufacturer = array_pop($arr);
}
return $manufacturer;
}
public static function getName($device)
{
return str_replace([self::getManufacturer($device), '//'], '', $device->name);
}
protected static function formattingData($device): array
{
return [
'name' => trim((string) $device->name),
'external_id' => trim((string) $device->code),
'category_code' => trim(substr(trim($device->code), 0, 3)),
'action' => trim((string) $device->action),
'photo' => trim((string) $device->image ?? ''),
'specification' => trim((string) $device->specification ?? ''),
];
}
public static function import($device): array
{
$data = self::formattingData($device);
$device_id = 0;
$result = 0;
if (isset($data['action'])) {
switch ($data['action']) {
case ImportService::NEW:
$request = new CreateRequest();
$validator = Validator::make($data, $request->rules());
if ($validator->fails()) {
$result = $validator->errors();
} else {
$device = DeviceRepository::save($data);
$device_id = $device->id;
$result = 1;
}
break;
case ImportService::UPDATE:
$request = new CreateRequest();
$validator = Validator::make($data, $request->rules());
if ($validator->fails()) {
$result = $validator->errors();
} else {
$device = Device::query()->where('external_id', $data['external_id'])->withTrashed()->first();
if ($device) {
$device = DeviceRepository::update($data, $device);
} else {
$device = DeviceRepository::save($data);
}
$device_id = $device->id;
$result = 1;
}
break;
case ImportService::DELETE:
$request = new DeleteRequest();
$validator = Validator::make($data, $request->rules());
if ($validator->fails()) {
$result = $validator->errors();
} else {
$res = DeviceRepository::delete($data);
$device_id = $res['device_id'];
$result = $res['result'];
}
break;
}
}
return ['device_id' => $device_id, 'result' => $result];
}
}