init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,228 @@
<?php
namespace App\Services\Manutencao;
use App\Models\Manutencao\Prioridade;
use App\Models\Manutencao\PrioridadeTipo;
use App\Models\Manutencao\Sla;
use App\Models\Manutencao\Status;
use App\Models\Manutencao\StatusTipo;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use App\Models\Cadastro\ServicoManutencao;
use App\Models\Manutencao\SolicitacaoStatusHistorico;
class ParametrizacaoService extends Service
{
public static function create()
{
return [
'form' => self::getFormData(),
'model' => self::getModelData(),
];
}
private static function getFormData()
{
return [
'status_tipo' => StatusTipo::all(),
'prioridade_tipo' => PrioridadeTipo::all(),
'prioridades' => Prioridade::select('id', 'nome')->get(),
];
}
private static function getModelData()
{
return [
'status' => Status::all()->map(fn ($status) => [
'id' => $status->id,
'tipo_status_id' => $status->tipo_id,
'tipo_status_nome' => $status->statusTipo->nome,
'nome_status' => $status->nome,
'allow_destroy' => SolicitacaoStatusHistorico::where('status_id', $status->id)->exists(),
]),
'prioridade' => Prioridade::all()->map(fn ($prioridade) => [
'id' => $prioridade->id,
'tipo_prioridade_id' => $prioridade->tipo_id,
'tipo_prioridade_nome' => $prioridade->prioridadeTipo->nome,
'nome_prioridade' => $prioridade->nome,
'allow_destroy' => ServicoManutencao::where('prioridade_id', $prioridade->id)->exists(),
]),
'sla' => Sla::all()->map(fn ($sla) => [
'id' => $sla->id,
'prioridade_id' => $sla->prioridade_id,
'prioridade_nome' => $sla->prioridade->nome,
'tempo_de_atendimento' => $sla->tempo_atendimento,
'allow_destroy' => TRUE,
]),
];
}
public static function store()
{
self::validate();
$status = collect(request()->status);
$prioridade = collect(request()->prioridade);
$sla = collect(request()->sla);
DB::beginTransaction();
try {
$statusParams = self::saveStatus($status);
$slaParams = self::saveSla($sla);
$prioridadeParams = self::savePrioridade($prioridade);
DB::commit();
return [
'status' => $statusParams,
'prioridade' => $prioridadeParams,
'sla' => $slaParams,
];
} catch (\Exception $e) {
DB::rollBack();
throw $e;
}
}
private static function saveStatus($status)
{
$statusIds = $status->pluck('id');
$status->each(function ($status) {
Status::updateOrCreate(
[
'id' => $status['id'],
],
[
'tipo_id' => $status['tipo_status_id'],
'nome' => $status['nome_status'],
]
);
});
Status::whereNotIn('id', $statusIds)->delete();
return $status->pluck('id');
}
private static function savePrioridade($prioridade)
{
$prioridadeIds = $prioridade->pluck('id');
$prioridade->each(function ($prioridade) {
Prioridade::updateOrCreate(
[
'id' => $prioridade['id'],
],
[
'tipo_id' => $prioridade['tipo_prioridade_id'],
'nome' => $prioridade['nome_prioridade'],
]
);
});
Prioridade::whereNotIn('id', $prioridadeIds)->delete();
return $prioridade->pluck('id');
}
private static function saveSla($sla)
{
$slaIds = $sla->pluck('id');
$sla->each(function ($sla) {
Sla::updateOrCreate(
[
'id' => $sla['id'],
],
[
'prioridade_id' => $sla['prioridade_id'],
'tempo_atendimento' => $sla['tempo_de_atendimento'],
]
);
});
Sla::whereNotIn('id', $slaIds)->delete();
return $sla->pluck('id');
}
private static function validate()
{
self::getStatusValidations();
self::getSlaValidations();
self::getPrioridadeValidations();
}
private static function getStatusValidations()
{
request()->validate([
'status' => [
'present',
'array',
],
'status.*.tipo_status_id' => [
'required',
'integer',
Rule::exists(StatusTipo::class, 'id'),
],
'status.*.nome_status' => [
'required',
'string',
'max:100',
'min:3',
],
]);
}
private static function getSlaValidations()
{
request()->validate([
'sla' => [
'present',
'array',
],
'sla.*.prioridade_id' => [
'required',
'integer',
Rule::exists(Prioridade::class, 'id'),
],
'sla.*.tempo_de_atendimento' => [
'required',
'string',
'min:5',
'max:6',
],
]);
}
private static function getPrioridadeValidations()
{
request()->validate([
'prioridade' => [
'present',
'array',
],
'prioridade.*.tipo_prioridade_id' => [
'required',
'integer',
Rule::exists(PrioridadeTipo::class, 'id'),
],
'prioridade.*.nome_prioridade' => [
'required',
'string',
'max:100',
'min:3',
],
]);
}
}