File manager - Edit - /var/www/html/portal/app/Http/Controllers/Api/NoticiasApiController.php
Back
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\Comunicacao\Noticia; use App\Enums\StatusTagCloudNewsEnum; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; use Carbon\Carbon; class NoticiasApiController extends Controller { /** * Retorna notícias filtradas por categoria (tag) * * @param Request $request * @return JsonResponse */ public function index(Request $request): JsonResponse { $categoria = $request->query('categoria'); $limite = $request->query('limite', 10); // Valida se a categoria existe no Enum if ($categoria && !$this->categoriaValida($categoria)) { return response()->json([ 'error' => 'Categoria inválida', 'categorias_disponiveis' => $this->listarCategorias() ], 400); } $query = Noticia::where('status', 'ATIVADO') ->orderBy('created_at', 'DESC'); // Filtra por categoria se informada if ($categoria) { $query->where('tags', 'LIKE', "%{$categoria}%"); } $noticias = $query->limit($limite)->get(); $resultado = $noticias->map(function ($noticia) { return [ 'titulo' => $noticia->title, 'resumo' => strip_tags($noticia->summary), 'data' => $this->formatarDataPorExtenso($noticia->created_at), 'foto' => $this->montarUrlFoto($noticia->featuredPhoto), 'url' => $this->montarUrlNoticia($noticia), ]; }); return response()->json($resultado) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, OPTIONS') ->header('Access-Control-Allow-Headers', 'Content-Type'); } /** * Lista categorias disponíveis */ public function categorias(): JsonResponse { return response()->json($this->listarCategorias()); } private function categoriaValida(string $categoria): bool { return collect(StatusTagCloudNewsEnum::cases()) ->contains(fn($case) => $case->name === $categoria); } private function listarCategorias(): array { return collect(StatusTagCloudNewsEnum::cases()) ->map(fn($case) => [ 'chave' => $case->name, 'nome' => $case->value ])->toArray(); } private function formatarDataPorExtenso($data): string { $meses = [ 1 => 'Janeiro', 2 => 'Fevereiro', 3 => 'Março', 4 => 'Abril', 5 => 'Maio', 6 => 'Junho', 7 => 'Julho', 8 => 'Agosto', 9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro', 12 => 'Dezembro' ]; $carbon = Carbon::parse($data); return sprintf( '%02d de %s de %d', $carbon->day, $meses[$carbon->month], $carbon->year ); } private function montarUrlFoto(?string $featuredPhoto): string { $baseUrl = config('app.url'); $default = "{$baseUrl}/pmar/assets/img/angra-default.png"; if (empty($featuredPhoto)) { return $default; } return "{$baseUrl}/{$featuredPhoto}"; } private function montarUrlNoticia(Noticia $noticia): string { $baseUrl = config('app.url'); $data = Carbon::parse($noticia->created_at)->format('d-m-Y'); return "{$baseUrl}/noticias/{$data}/{$noticia->slug}"; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings