Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

209 lines
5.9 KiB
PHP

<?php
namespace App\Services\Cadastro;
use App\Models\Cadastro\Ferida;
use App\Models\Cadastro\FeridaProcedimento;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class FeridaService extends Service
{
public static function datatable()
{
return DB::table('cadastro_ferida as ferida')
->select(DB::raw("
ferida.id,
ferida.nome,
ferida.ativo,
'ferida.identificador_externo',
ferida.observacao
"));
}
public static function create()
{
return [
'form' => self::getFormData(),
'model' => [
'nome' => null,
'ativo' => true,
'identificador_externo' => null,
'cid' => null,
'observacao' => null,
'procedimento' => null,
'procedimentos' => [],
],
];
}
public static function store()
{
self::validate();
$params = self::getParams();
$ferida = Ferida::create($params);
foreach (request()->procedimentos as $procedimento) {
$cidId = $procedimento['cid_id'] ?? null;
$quantidade = $procedimento['quantidade'] ?? null;
FeridaProcedimento::create([
'ferida_id' => $ferida->id,
'procedimento_id' => $procedimento['id'],
'cid_id' => $cidId,
'quantidade' => $quantidade,
]);
}
return $ferida;
}
public static function edit($id)
{
$ferida = Ferida::with(
[
'procedimentos.procedimento',
'procedimentos.cid'
]
)->findOrFail($id);
return [
'form' => self::getFormData(),
'model' => [
'nome' => $ferida->nome,
'ativo' => $ferida->ativo ?? false,
'identificador_externo' => $ferida->identificador_externo,
'observacao' => $ferida->observacao ?? null,
'procedimento' => null,
'procedimentos' => $ferida->procedimentos->map(fn ($procedimento) =>
(object) [
'codigo' => $procedimento->procedimento->codigo,
'nome' => $procedimento->procedimento->nome,
'id' => $procedimento->procedimento_id,
'cid_id' => $procedimento->cid_id,
'cid' => $procedimento->cid,
'quantidade' => $procedimento->quantidade,
]
),
],
];
}
private static function getFormData()
{
return [];
}
public static function update($id)
{
self::validate();
$ferida = Ferida::findOrFail($id);
$params = self::getParams();
$ferida->update($params);
FeridaProcedimento::where('ferida_id', $ferida->id)->delete();
foreach (request()->procedimentos as $procedimento) {
$cidId = $procedimento['cid_id'] ?? null;
$quantidade = $procedimento['quantidade'] ?? null;
FeridaProcedimento::create([
'ferida_id' => $ferida->id,
'procedimento_id' => $procedimento['id'],
'cid_id' => $cidId,
'quantidade' => $quantidade,
]);
}
return $ferida->fresh();
}
private static function getParams()
{
$params = request()->except(['procedimentos']);
return $params;
}
public static function activate($id)
{
$feriado = Ferida::findOrFail($id);
$feriado->update(['ativo' => true]);
return $feriado->fresh();
}
public static function deactivate($id)
{
$feriado = Ferida::findOrFail($id);
$feriado->update(['ativo' => false]);
return $feriado->fresh();
}
public static function destroy($id)
{
FeridaProcedimento::where('ferida_id', $id)->delete();
Ferida::findOrFail($id)->delete();
}
private static function validate()
{
$validator = Validator::make(request()->all(), [
'nome' => [
'required',
'string',
'between:3,100',
Rule::unique(Ferida::class, 'nome')
->ignore(request()->route('ferida'))
],
'ativo' => [
'required',
'boolean',
],
'identificador_externo' => [
'nullable',
'alpha_num',
'max:64',
Rule::unique(Ferida::class, 'identificador_externo')
->ignore(request()->route('ferida'))
],
'observacao' => [
'nullable',
'string',
'max:500',
],
], [
'nome.unique' => 'O nome da Ferida já foi inserido anteriormente.',
'identificador_externo.alpha_num' => 'O Identificador Externo deve conter apenas letras e números.',
'identificador_externo.max' => 'O Identificador Externo não pode ter mais que 64 caracteres.',
'identificador_externo.unique' => 'O Identificador Externo já está em uso.',
]);
if ($validator->fails()) {
if ($validator->errors()->has('identificador_externo')) {
Log::info('Tentativa de gravação de Identificador Externo inválido ou duplicado.', [
'user_id' => auth()->id(),
'identificador_externo' => request('identificador_externo'),
'errors' => $validator->errors()->get('identificador_externo')
]);
}
$validator->validate();
}
}
}