File manager - Edit - /var/www/html/portal/app/Http/Services/Cultura/ArteSacra/OpcoesService.php
Back
<?php namespace App\Http\Services\Cultura\ArteSacra; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\DB; use App\Models\Cultura\ArteSacra\{ ClasseArte, Designacao, Material, ModoAquisicao, Proprietario, Tecnica, TipoAcervo, Tombamento, }; class OpcoesService { /* ===================================================== * LISTAGEM * ===================================================== */ public function listarUnicos(string $type) { $map = $this->mapType($type); if (!$map) { return collect(); } [$model, $field] = $map; $ids = $model::selectRaw('MIN(id) as id') ->groupBy($field) ->pluck('id'); return $model::whereIn('id', $ids) ->orderBy($field) ->get(); } /* ===================================================== * STORE * ===================================================== */ public function store(Request $request, string $type): RedirectResponse { $validated = $request->validate([ 'name' => 'required|string|max:255' ]); try { DB::beginTransaction(); switch ($type) { case 'classArte': ClasseArte::create(['classe' => $validated['name']]); break; case 'designacao': Designacao::create(['designacao' => $validated['name']]); break; case 'material': Material::create(['material' => $validated['name']]); break; case 'modoAquisicao': ModoAquisicao::create(['modo_aquisicao' => $validated['name']]); break; case 'proprietario': Proprietario::create(['proprietario' => $validated['name']]); break; case 'tecnica': Tecnica::create(['tecnica' => $validated['name']]); break; case 'tiposAcervo': TipoAcervo::create(['tipo' => $validated['name']]); break; case 'tombamento': Tombamento::create(['tombamento' => $validated['name']]); break; default: DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Tipo inválido.'); } DB::commit(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('success', 'Item adicionado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->withInput() ->with('error', 'Erro ao adicionar item. ' . $e->getMessage()); } } /* ===================================================== * UPDATE * ===================================================== */ public function update(Request $request, $id, $type): RedirectResponse { $validated = $request->validate([ 'name' => 'required|string|max:255' ]); try { DB::beginTransaction(); $map = $this->mapType($type); if (!$map) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Tipo inválido.'); } [$model, $field] = $map; $item = $model::find($id); if (!$item) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Item não encontrado.'); } $item->$field = $validated['name']; $item->save(); DB::commit(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('success', 'Item atualizado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->withInput() ->with('error', 'Erro ao atualizar item. ' . $e->getMessage()); } } /* ===================================================== * TOGGLE STATUS * ===================================================== */ public function toggleStatus($id, $type): RedirectResponse { try { DB::beginTransaction(); $map = $this->mapType($type); if (!$map) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Tipo inválido.'); } [$model] = $map; $item = $model::find($id); if (!$item) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Item não encontrado.'); } $item->status = $item->status == 1 ? 0 : 1; $item->save(); DB::commit(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('success', 'Status atualizado com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Erro ao atualizar status. ' . $e->getMessage()); } } public function destroy($id, string $type): RedirectResponse { try { DB::beginTransaction(); $map = $this->mapType($type); if (!$map) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Tipo inválido.'); } [$model] = $map; $item = $model::find($id); if (!$item) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Item não encontrado.'); } $item->delete(); DB::commit(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('success', 'Item excluído com sucesso!'); } catch (\Exception $e) { DB::rollBack(); return redirect() ->route('admin.cultura.arteSacra.options') ->with('error', 'Erro ao excluir item. ' . $e->getMessage()); } } /* ===================================================== * MAPA DE TIPOS * ===================================================== */ private function mapType(string $type): ?array { return match (strtolower($type)) { 'classarte' => [ClasseArte::class, 'classe'], 'designacao' => [Designacao::class, 'designacao'], 'material' => [Material::class, 'material'], 'modoaquisicao' => [ModoAquisicao::class, 'modo_aquisicao'], 'proprietario' => [Proprietario::class, 'proprietario'], 'tecnica' => [Tecnica::class, 'tecnica'], 'tiposacervo' => [TipoAcervo::class, 'tipo'], 'tombamento' => [Tombamento::class, 'tombamento'], default => null }; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings