File manager - Edit - /var/www/html/gop/api/app/Http/Controllers/TermoController.php
Back
<?php namespace App\Http\Controllers; use App\Enums\Termo as TermoEnum; use App\Http\Requests\Store\StorePrivateFieldRequest; use App\Http\Requests\Store\StoreTermoRequest; use App\Http\Requests\Update\UpdateTermoRequest; use App\Http\Services\DocumentoService; use App\Http\Services\PrivateFieldService; use App\Models\Termo; use Illuminate\Support\Facades\Validator; use Symfony\Component\HttpFoundation\JsonResponse; /** * @OA\Tag( * name="Termo", * description="Gerenciamento de Termos" * ) */ class TermoController extends Controller { public function __construct() { $this->authorizeResource(Termo::class); } /** * @OA\Get( * path="/api/termo", * summary="Lista termos", * operationId="IndexTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Response(response=200, description="Termos retornados com sucesso") * ) */ public function index() { return response()->json( Termo::with([ 'responsavelFirma', 'responsavelTecnico', 'empresa' ])->paginate() ); } /** * @OA\Get( * path="/api/termo/{termo}/pdf", * summary="Gera PDF do termo", * operationId="GeraPdfTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\Response(response=200, description="PDF gerado com sucesso"), * @OA\Response(response=422, description="Validação falhou") * ) */ public function geraPdf(Termo $termo) { $this->authorize('geraPdf', $termo); $termo->load('endereco'); $documentoService = new DocumentoService(); $validate = Validator::make($termo->toArray(), [ 'responsavel_firma_id' => 'required', 'responsavel_tecnico_id' => 'required', ], [ 'responsavel_firma_id.required' => 'O responsável pela firma precisa ser informado no cadastro do termo.', 'responsavel_tecnico_id.required' => 'O responsável técnico precisa ser informado no cadastro do termo.', ]); if ($validate->fails()) { return response()->json($validate->errors(), JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } if ($termo->tipo === TermoEnum::TRD->value) { $path = $documentoService->pdfTRD($termo); } elseif ($termo->tipo === TermoEnum::TRP->value) { $path = $documentoService->pdfTRP($termo); } else { return response()->json(['message' => 'Tipo inválido.'], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } return response()->json($path); } /** * @OA\Post( * path="/api/termo", * summary="Cria termo", * operationId="StoreTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=201, description="Termo criado com sucesso") * ) */ public function store(StoreTermoRequest $request) { return response()->json(Termo::create($request->validated()), JsonResponse::HTTP_CREATED); } /** * @OA\Get( * path="/api/termo/{termo}", * summary="Exibe termo", * operationId="ShowTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\Response(response=200, description="Termo retornado com sucesso") * ) */ public function show(Termo $termo) { return response()->json( $termo->load([ 'responsavelFirma', 'responsavelTecnico', 'empresa', ]) ); } /** * @OA\Get( * path="/api/termo/new-number/{tipo}", * summary="Gera novo número de termo", * operationId="GetNewTermoNumber", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="tipo", * in="path", * required=true, * @OA\Schema(type="string"), * description="Tipo de termo (TRD ou TRP)" * ), * @OA\Response(response=200, description="Número gerado com sucesso"), * @OA\Response(response=422, description="Tipo inválido") * ) */ public function getNewNumber(string $tipo) { if (! in_array(strtoupper($tipo), array_column(TermoEnum::cases(), 'value'))) { return response()->json(['message' => 'Tipo inválido.'], JsonResponse::HTTP_UNPROCESSABLE_ENTITY); } $lastTermo = Termo::where('tipo', $tipo) ->where('ano', date('Y')) ->orderBy('numero', 'desc') ->first(); return response()->json($lastTermo ? $lastTermo->numero + 1 : 1); } /** * @OA\Put( * path="/api/termo/{termo}", * summary="Atualiza termo", * operationId="UpdateTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Termo atualizado com sucesso") * ) */ public function update(UpdateTermoRequest $request, Termo $termo) { $termo->update($request->validated()); return response()->json($termo, JsonResponse::HTTP_OK); } /** * @OA\Delete( * path="/api/termo/{termo}", * summary="Remove termo", * operationId="DeleteTermo", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\Response(response=204, description="Termo removido com sucesso") * ) */ public function destroy(Termo $termo) { $termo->delete(); return response()->json([], JsonResponse::HTTP_NO_CONTENT); } /** * @OA\Get( * path="/api/termo/{termo}/campos-ocultos", * summary="Campos privados do termo", * operationId="ShowTermoPrivateFields", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\Response(response=200, description="Campos privados retornados com sucesso") * ) */ public function showPrivateFields(Termo $termo) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->show($termo); } /** * @OA\Post( * path="/api/termo/{termo}/campos-ocultos", * summary="Atualiza campos privados do termo", * operationId="SetTermoPrivateFields", * tags={"Termo"}, * security={{"bearerAuth":{}}}, * @OA\Parameter( * name="termo", * in="path", * required=true, * @OA\Schema(type="integer", format="int64") * ), * @OA\RequestBody(required=true, @OA\JsonContent()), * @OA\Response(response=200, description="Campos privados atualizados com sucesso") * ) */ public function setPrivateFields(StorePrivateFieldRequest $request, Termo $termo) { $privateFieldService = new PrivateFieldService(); return $privateFieldService->setPrivateFields($request, $termo); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings