File: /var/www/ipsremont-demo/app/Services/Schema/SchemaService.php
<?php
namespace App\Services\Schema;
use App\Http\Requests\DeleteRequest;
use App\Http\Requests\Schema\CreateRequest;
use App\Models\DevicesSchema;
use App\Models\Schema;
use App\Repository\Schema\SchemaRepository;
use App\Services\ImportService;
use Illuminate\Support\Facades\Validator;
class SchemaService extends Schema
{
protected static function formattingData($schema, $sequence_number): array
{
$data = [
'name' => (string) $schema->name,
'external_id' => (string) $schema->code,
'action' => (string) $schema->action,
'photo' => (string) $schema->file ?? '',
'sequence_number' => $sequence_number,
];
array_walk($data, function (&$value) {
$value = trim($value);
});
return $data;
}
public static function import($schema, $sequence_number, $device_id): array
{
$data = self::formattingData($schema, $sequence_number);
$schema_external_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 {
$schema = SchemaRepository::save($data, $device_id);
$schema_external_id = $schema->external_id;
$result = 1;
}
break;
case ImportService::UPDATE:
$request = new CreateRequest();
$validator = Validator::make($data, $request->rules());
if ($validator->fails()) {
$result = $validator->errors();
} else {
$schema = Schema::query()->where('external_id', $data['external_id'])->withTrashed()->first();
if ($schema) {
$schema = SchemaRepository::update($data, $schema, $device_id);
} else {
$schema = SchemaRepository::save($data, $device_id);
}
$schema_external_id = $schema->external_id;
$result = 1;
}
break;
case ImportService::DELETE:
$request = new DeleteRequest();
$validator = Validator::make($data, $request->rules());
if ($validator->fails()) {
$result = $validator->errors();
} else {
$schema = Schema::where('external_id', $data['external_id'])->first();
if ($schema) {
DevicesSchema::where('device_id', $device_id)->where('schema_id', $schema->id)->delete();
$schema_external_id = SchemaRepository::delete($data['external_id']);
$result = 1;
} else {
$result = 0;
}
}
break;
}
}
return ['schema_external_id' => $schema_external_id, 'result' => $result];
}
}