Este é um sistema desenvolvido em Laravel 11 e Inertia.js para consumir uma API pública de futebol e fornecer informações sobre os jogos do Campeonato Brasileiro ou de outras ligas, conforme escolha do usuário. O sistema permite visualizar próximos jogos, resultados passados e pesquisar por time específico.
- Backend: Laravel 11
- Frontend: React.js via Inertia.js
- Estilização: TailwindCSS
- Outras bibliotecas:
react-slick
- Utilizado para criar carrosséis de exibiçãodayjs
- Tratamento e formatação de datas@iconify/react
- Exibição de ícones
- Selecionar um campeonato para visualizar seus jogos.
- Exibir jogos programados da próxima rodada, incluindo:
- Nome dos times (casa e visitante)
- Data e hora do jogo
- Estádio (se disponível)
- Exibir últimos resultados das partidas já realizadas.
- Permitir pesquisa por time e exibir suas próximas partidas e últimos resultados.
A API https://api.football-data.org
é muito instável e possui um limite de 10 chamadas por minuto, o que tornou necessário o uso de um sistema de cache.
- O cache foi implementado na classe
Services/ApiRequestService.php
, armazenando as respostas da API por 5 minutos. - O ideal seria usar Redis, mas para fins de teste foi utilizado SQLite.
- Como a API não possui um endpoint direto para buscar times, foi criado um mecanismo que:
- Obtém uma lista de 200 equipes e armazena em cache.
- Realiza buscas locais para encontrar times como "Barcelona".
O cache é gerenciado pelo método makeWithCache()
localizado na classe ApiRequestService, que verifica se os dados já estão armazenados antes de fazer uma nova requisição:
// Verifica se o cache já possui os dados
$cacheKey = md5($path . json_encode($params));
if (cache()->has($cacheKey)) {
return cache($cacheKey);
}
// Se não houver cache, faz a requisição e armazena por 5 minutos
$response = self::make($path, $params, $method);
if ($response['status'] == 'error') {
return $response;
}
cache([$cacheKey => $response], now()->addMinutes($minutes));
return $response;
-
Clone o repositório:
git clone https://github.com/adriano461997/futebol.git cd futebol
-
Instale as dependências do Laravel:
composer install
-
Instale as dependências do Node.js:
npm install
-
As ambientes de váriveis já estão disponíveis em
.env
. -
Execute as migrações do banco de dados:
php artisan migrate
-
Inicie o servidor e o frontend:
composer run dev
-
Acesse no navegador:
http://localhost:8000
OBS:
Pela API ser instável, qualquer erro é só recarregar a página até que funcione. Este problema está no lado da API mesmo.
app/
├── Http/
│ ├── Controllers/
│ │ ├── CompeticaoController.php
│ │ ├── HomeController.php
│ │ ├── PesquisarTimesController.php
│ │ ├── TeamController.php
│ ├── Middleware/
├── Services/
│ ├── ApiRequestService.php # Serviço responsável pelas requisições da API
├── Models/
├── Views/
resources/
├── js/
│ ├── Components/
│ │ ├── CustomError.tsx
│ │ ├── MatchItem.tsx
│ ├── Layouts/
│ │ ├── CustomLayout.tsx
│ ├── Pages/
│ │ ├── Competicao/
│ │ │ ├── show.tsx
│ │ ├── Home.jsx # Página principal
│ │ ├── Pesquisar/
│ │ │ ├── index.tsx
│ │ ├── Team/
│ │ │ ├── show.tsx
│ ├── app.tsx
│ ├── types/
│ │ ├── Competicao.ts
│ │ ├── CompeticaoTeams.ts
│ │ ├── Matches.ts
│ │ ├── TeamResponse.ts
resources/
├── views/
│ ├── app.blade.php
routes/
├── web.php