HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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];
    }

}