Files
rkm-conectasus-ci-sandbox/api/app/Services/Administracao/GestorService.php
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

168 lines
5.1 KiB
PHP

<?php
namespace App\Services\Administracao;
use App\Models\Administracao\Gestor;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class GestorService extends Service
{
public static function index()
{
//
}
public static function create()
{
return [
'form' => self::getFormData(),
'model' => self::getModelData(),
];
}
public static function store($request)
{
self::validate($request);
$gestor = null;
DB::transaction(function () use ($request, &$gestor) {
$gestor = Gestor::create($request->all())->fresh();
$gestor->papeis()->sync($request['papeis']);
$gestor->permissoes()->sync($request['permissoes']);
});
return $gestor;
}
public static function show($id)
{
return Gestor::find($id);
}
public static function edit($id)
{
return [
'form' => self::getFormData(),
'model' => self::getModelData($id),
];
}
public static function update($request, $id)
{
self::validate($request);
DB::transaction(function () use ($request, $id) {
$gestor = self::show($id);
$gestor->update($request->all());
$gestor->papeis()->sync($request['papeis']);
$gestor->permissoes()->sync($request['permissoes']);
});
return true;
}
public static function destroy($id)
{
return self::show($id)->delete();
}
public static function datatable()
{
return DB::table('administracao_gestor')
->select([
'administracao_gestor.id',
'cadastro_cidadao.nome',
])
->join('cadastro_usuario', 'cadastro_usuario.id', 'administracao_gestor.usuario_id')
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id');
}
private static function validate($request)
{
return $request->validate([
'usuario_id' => [
'required',
'integer',
Rule::unique('administracao_gestor')->ignore($request->gestor),
],
]);
}
private function getFormData()
{
return [
'papeis' => DB::table('administracao_papel')
->select(['id', 'nome'])
->orderBy('nome')
->whereNull('deleted_at')
->get(),
'modulos' => DB::table('administracao_modulo')
->select([
'id',
'nome',
])
->orderBy('nome')
->get()
->map(function ($modulo) {
return [
'id' => $modulo->id,
'nome' => $modulo->nome,
'funcionalidades' => DB::table('administracao_funcionalidade')
->select([
'id',
'nome',
])
->where('modulo_id', $modulo->id)
->orderBy('nome')
->get()
->map(function ($funcionalidade) {
return [
'id' => $funcionalidade->id,
'nome' => $funcionalidade->nome,
'permissoes' => DB::table('administracao_permissao')
->select([
'administracao_permissao.id',
'administracao_crud_acao.nome',
])
->join('administracao_crud_acao', 'administracao_crud_acao.id', 'administracao_permissao.crud_acao_id')
->where('funcionalidade_id', $funcionalidade->id)
->get()
->map(fn ($permissao) => [
'id' => $permissao->id,
'nome' => $permissao->nome,
]),
];
}),
];
}),
];
}
private static function getModelData($id = null)
{
$gestor = self::show($id);
if (is_null($gestor)) {
return [
'usuario' => null,
'papeis' => [],
'permissoes' => [],
];
} else {
return [
'usuario' => [
'id' => $gestor->usuario->id,
'cidadao_nome' => $gestor->usuario->cidadao->nome,
],
'papeis' => $gestor->papeis->pluck('id') ?? [],
'permissoes' => $gestor->permissoes->pluck('id') ?? [],
];
}
}
}