File manager - Edit - /var/www/html/gop/api/app/Http/Controllers/EmpresaController.php
Back
<?php namespace App\Http\Controllers; use App\Http\Requests\Store\StoreEmpresaRequest; use App\Http\Requests\Store\StorePrivateFieldRequest; use App\Http\Requests\Update\UpdateEmpresaRequest; use App\Http\Services\PrivateFieldService; use App\Models\Empresa; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Symfony\Component\HttpFoundation\JsonResponse; /** * @OA\Tag( * name="Empresa", * description="Gerenciamento de Empresas" * ) */ class EmpresaController extends Controller { public function __construct() { $this->authorizeResource(Empresa::class); } /** * Retorna a lista de empresas paginadas. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/empresas", * summary="Lista Empresas", * operationId="IndexEmpresa", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Response(response=200, description="Empresas retornados com sucesso") * ) */ public function index(Request $request) { // Validação simples dos parâmetros (opcional) $validator = Validator::make($request->all(), [ 'nome' => 'sometimes|string|max:255', 'cnpj' => 'sometimes|string|max:30', 'per_page' => 'sometimes|integer|min:1|max:200', ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } $nome = $request->query('nome'); $cnpj = $request->query('cnpj'); $perPage = (int) $request->query('per_page', 15); $query = Empresa::with([ 'prestadores', 'endereco', 'obras.responsavelFirma', 'obras.responsavelTecnico', ]); if (! empty($nome)) { $query->where('nome', 'like', "%{$nome}%"); } if (! empty($cnpj)) { $cnpjDigits = preg_replace('/\D+/', '', $cnpj); if ($cnpjDigits !== '') { $query->where('cnpj', $cnpjDigits); } } // ordenação opcional (ex.: ?order_by=nome&dir=asc) $orderBy = $request->query('order_by', 'id'); $dir = strtolower($request->query('dir', 'desc')) === 'asc' ? 'asc' : 'desc'; $query->orderBy($orderBy, $dir); $paginator = $query->paginate($perPage)->appends($request->only(['nome', 'cnpj', 'per_page', 'order_by', 'dir'])); return response()->json($paginator); } /** * Salva uma nova empresa. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Post( * path="/api/empresas", * summary="Cria Empresa", * operationId="StoreEmpresa", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\RequestBody(required=true, @OA\JsonContent()), * * @OA\Response(response=201, description="Empresa criado com sucesso") * ) */ public function store(StoreEmpresaRequest $request) { $userRequest = [ 'name' => $request->nome, 'user_type_id' => 2, 'email' => $request->email, 'document' => $request->cnpj, 'password' => 'alterar@123', ]; authServiceClient('post', 'api/user', $userRequest); return response()->json(Empresa::create($request->validated()), JsonResponse::HTTP_CREATED); } /** * Mostra a empresa de determinado id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/empresas/{empresa}", * summary="Mostra Empresa", * operationId="ShowEmpresa", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Parameter( * name="empresa", in="path", required=true, @OA\Schema(type="string") * ), * * @OA\Response(response=200, description="Empresa retornado com sucesso") * ) */ public function show(Empresa $empresa) { return response()->json($empresa->load([ 'prestadores', 'endereco', 'obras.responsavelFirma', 'obras.responsavelTecnico', ])); } /** * Atualiza a empresa baseando-se em seu id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Put( * path="/api/empresas/{empresa}", * summary="Atualiza Empresa", * operationId="UpdateEmpresa", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Parameter( * name="empresa", in="path", required=true, @OA\Schema(type="string") * ), * * @OA\RequestBody(required=true, @OA\JsonContent()), * * @OA\Response(response=200, description="Empresa atualizado com sucesso") * ) */ public function update(UpdateEmpresaRequest $request, Empresa $empresa) { $empresa->update($request->validated()); return response()->json($empresa, JsonResponse::HTTP_OK); } /** * Remove a empresa com base no seu id. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Delete( * path="/api/empresas/{empresa}", * summary="Remove Empresa", * operationId="DeleteEmpresa", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Parameter( * name="empresa", in="path", required=true, @OA\Schema(type="string") * ), * * @OA\Response(response=204, description="Empresa removido com sucesso") * ) */ public function destroy(Empresa $empresa) { if ($empresa->prestadores()->exists() || $empresa->obras()->exists()) { return response()->json([ 'message' => 'Não é possível remover a empresa, pois ela possui relacionamentos ativos.', ], JsonResponse::HTTP_CONFLICT); } $empresa->delete(); return response()->json([], JsonResponse::HTTP_NO_CONTENT); } /** * Mostra os campos privados do modelo. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Get( * path="/api/empresas/{empresa}/campos-ocultos", * summary="Mostra campos privados do Empresa", * operationId="ShowEmpresaPrivateFields", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Parameter( * name="empresa", in="path", required=true, @OA\Schema(type="string") * ), * * @OA\Response(response=200, description="Campos privados retornados com sucesso") * ) */ public function showPrivateFields(Empresa $empresa) { $privateFieldService = new PrivateFieldService; return $privateFieldService->show($empresa); } /** * Modifica os campos privados do modelo. * * @return \Illuminate\Http\JsonResponse */ /** * @OA\Put( * path="/api/empresas/{empresa}/campos-ocultos", * summary="Modifica campos privados do Empresa", * operationId="SetEmpresaPrivateFields", * tags={"Empresa"}, * security={{"bearerAuth":{}}}, * * @OA\Parameter( * name="empresa", in="path", required=true, @OA\Schema(type="string") * ), * * @OA\RequestBody(required=true, @OA\JsonContent()), * * @OA\Response(response=200, description="Campos privados modificados com sucesso") * ) */ public function setPrivateFields(StorePrivateFieldRequest $request, Empresa $empresa) { $privateFieldService = new PrivateFieldService; return $privateFieldService->setPrivateFields($request, $empresa); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings