Uma poderosa API RESTful para gerenciamento de tarefas, construída com Laravel 12 e seguindo as melhores práticas de desenvolvimento. Este projeto implementa uma série de padrões de design para manter o código organizado, testável e fácil de manter.
- Visão Geral
- Funcionalidades
- Começando
- Estrutura do Projeto
- Padrões de Design
- Sistema de Perfis de Usuário
- Cores e Favoritos
- Endpoints da API
- Autenticação
- Testes
- Desenvolvimento
- Deploy
- Resolução de Problemas
- Contribuindo
- Licença
Esta API permite gerenciar tarefas (to-do lists) com recursos avançados, incluindo:
- Múltiplos usuários com diferentes níveis de permissão
- Categorização visual de tarefas por cores
- Sistema de favoritos para acesso rápido
- Auditoria de mudanças
- Autenticação segura com Laravel Sanctum
Todo o projeto foi construído seguindo boas práticas de código, incluindo implementação de padrões de design como Repository, Service Layer, e Observer Pattern, além de TDD (Test-Driven Development).
- Gerenciamento de Tarefas: Criar, visualizar, atualizar e excluir tarefas
- Sistema de Perfis: Três níveis de acesso (Admin, Gerente, Membro)
- Personalização Visual: 10 cores predefinidas para categorizar tarefas
- Favoritos: Marcar/desmarcar tarefas como favoritas para acesso rápido
- Filtragem: Buscar tarefas por status, datas e outros critérios
- Autenticação: Sistema seguro com tokens via Laravel Sanctum
- Autorização: Políticas de acesso baseadas em perfil
- Auditoria: Registro de todas as alterações nas tarefas
- API Token: Camada adicional de segurança para aplicações cliente
- Documentação Interativa: Interface Swagger para explorar a API
Para rodar este projeto, você precisa ter instalado:
- Docker (para Laravel Sail)
- Docker Compose
- Git
Não é necessário instalar PHP, MySQL ou Redis localmente, pois o Laravel Sail (Docker) irá gerenciar essas dependências.
-
Clone o repositório:
1.1. Via HTTPS:git clone https://github.com/guilhermehub12/corelab-api.git cd corelab-api1.2. Via SSH:
git clone git@github.com:guilhermehub12/corelab-api.git cd corelab-api -
Crie o arquivo
.enva partir do exemplo:cp .env.example .env
-
Inicie o ambiente de desenvolvimento com Laravel Sail:
docker run --rm \ -u "$(id -u):$(id -g)" \ -v $(pwd):/var/www/html \ -w /var/www/html \ laravelsail/php84-composer:latest \ composer install --ignore-platform-reqs ou caso possua PHP instalado, utilize composer install ./vendor/bin/sail up -d
-
Instale as dependências:
./vendor/bin/sail composer install
-
Gere a chave da aplicação:
./vendor/bin/sail artisan key:generate
-
Execute as migrações e popule o banco de dados:
./vendor/bin/sail artisan migrate --seed
-
Gere a documentação da API:
./vendor/bin/sail artisan l5-swagger:generate
Abra o arquivo .env e ajuste as seguintes configurações:
APP_NAME="CoreLab API"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
API_TOKEN=seu_token_secreto_aqui
AUTH_TOKEN=seu_token_secreto_aqui
OCTANE_SERVER=swoole
L5_SWAGGER_GENERATE_ALWAYS=true
L5_SWAGGER_CONST_HOST=http://localhost
app/
├── Enums/ # Enumerações como ProfileEnum
├── Http/
│ ├── Controllers/ # Controllers da API
│ ├── Middleware/ # Middlewares (EnsureApiToken, etc.)
│ ├── Requests/ # Form Requests para validação
│ └── Resources/ # Transformadores de recursos da API
├── Models/ # Modelos Eloquent (Task, User, etc.)
├── Observers/ # Observadores de modelo
├── Policies/ # Políticas de autorização
├── Providers/ # Service Providers
├── Repositories/ # Camada de repositório para acesso a dados
└── Services/ # Camada de serviço com lógica de negócios
O projeto utiliza diversos padrões de design para manter o código organizado e de fácil manutenção:
- Models: Representam os dados e as regras de negócio
- Controllers: Processam requisições e retornam respostas
- Views: Substituídas por Resources em APIs RESTful
- Abstrai o acesso a dados
- Permite trocar a fonte de dados sem afetar a lógica de negócios
- Centraliza operações de banco de dados
- Encapsula a lógica de negócios
- Mantém os controllers enxutos
- Facilita testes unitários
- Monitora eventos do ciclo de vida dos modelos
- Registra logs de atividade
- Implementa ações automáticas em resposta a eventos
- Gerencia a lógica de autorização
- Aplica permissões baseadas em perfis
- Centraliza as regras de acesso
O sistema implementa três níveis de perfis de usuários, cada um com diferentes permissões:
- Acesso completo ao sistema
- Pode visualizar, criar, editar e excluir qualquer tarefa
- Pode atribuir tarefas a qualquer usuário
- Maior limite de taxa de requisições
- Pode visualizar todas as tarefas
- Pode criar tarefas para si ou para outros usuários
- Pode editar e excluir tarefas de qualquer usuário
- Limite médio de taxa de requisições
- Visualiza apenas suas próprias tarefas
- Pode criar tarefas apenas para si mesmo
- Pode editar e excluir apenas suas próprias tarefas
- Limite mais restrito de taxa de requisições
Os seguintes usuários são criados pelo seeder para testes:
- Admin: admin@email.com (senha: password)
- Gerente: manager@email.com (senha: password)
- Membro: member@email.com (senha: password)
O sistema oferece 10 cores predefinidas para personalizar a aparência das tarefas:
- Vermelho (#FF5252) - Para tarefas urgentes
- Azul (#4285F4) - Cor padrão para tarefas normais
- Verde (#0F9D58) - Para tarefas concluídas ou em andamento
- Amarelo (#FFCA28) - Para tarefas de atenção moderada
- Roxo (#9C27B0) - Para tarefas criativas
- Laranja (#FF7043) - Para tarefas de prioridade média
- Ciano (#00BCD4) - Para tarefas relacionadas a comunicação
- Rosa (#E91E63) - Para tarefas pessoais
- Verde-água (#26A69A) - Para tarefas de bem-estar
- Cinza (#757575) - Para tarefas neutras ou de baixa prioridade
- Os usuários podem marcar qualquer tarefa como favorita para acesso rápido
- Uma tarefa pode ser favoritada por vários usuários
- Existe um endpoint específico para listar todas as tarefas favoritas do usuário autenticado
POST /api/register- Registrar um novo usuárioPOST /api/login- Login de usuárioPOST /api/logout- Logout (requer autenticação)GET /api/user- Obter informações do usuário autenticado
GET /api/tasks- Obter todas as tarefas (filtradas por perfil)POST /api/tasks- Criar uma nova tarefaGET /api/tasks/{id}- Obter uma tarefa específicaPUT /api/tasks/{id}- Atualizar uma tarefaDELETE /api/tasks/{id}- Excluir uma tarefaGET /api/tasks/status/{status}- Obter tarefas por status
GET /api/tasks/colors- Listar todas as cores disponíveisPUT /api/tasks/{id}/color/{colorId}- Atualizar a cor de uma tarefa
GET /api/tasks/favorites- Listar tarefas favoritas do usuárioPOST /api/tasks/{id}/favorite- Alternar status de favorito de uma tarefa
A documentação interativa da API está disponível em:
http://localhost/api/doc
O sistema utiliza dois mecanismos de autenticação:
Para autenticar usuários individuais:
-
Faça login para obter um token:
POST /api/login Content-Type: application/json { "email": "admin@email.com", "password": "password" }
-
Use o token nas requisições:
GET /api/tasks Authorization: Bearer seu_token_aqui
Para autenticar aplicações cliente (camada adicional de segurança):
GET /api/tasks
Authorization: Bearer seu_token_usuario
X-API-TOKEN: seu_token_apiO token de API deve ser configurado no arquivo .env como API_TOKEN=seu_token_aqui.
O projeto inclui testes abrangentes para todas as funcionalidades:
./vendor/bin/sail artisan test# Testes de autenticação
./vendor/bin/sail artisan test --filter='Tests\\Feature\\Auth'
# Testes de tarefas
./vendor/bin/sail artisan test --filter='Tests\\Feature\\Task'
# Um teste específico
./vendor/bin/sail artisan test --filter=TaskShowTestXDEBUG_MODE=coverage ./vendor/bin/sail artisan test --coverage-html coverage# Listar todas as rotas
./vendor/bin/sail artisan route:list
# Criar um novo controller
./vendor/bin/sail artisan make:controller Api/NovoController --api
# Criar um novo model com migration, factory e seeder
./vendor/bin/sail artisan make:model NovoModel -mfs
# Limpar caches
./vendor/bin/sail artisan optimize:clear# Refresh do banco de dados (apaga tudo e recria)
./vendor/bin/sail artisan migrate:fresh --seed
# Adicionar uma nova coluna a uma tabela existente
./vendor/bin/sail artisan make:migration add_coluna_to_tabela --table=tabela# Limpar cache de configuração
./vendor/bin/sail artisan config:clear
# Limpar cache de rotas
./vendor/bin/sail artisan route:clearO projeto utiliza várias ferramentas para garantir a qualidade do código:
# Verificar formatação
./vendor/bin/sail composer pint
# Corrigir formatação
./vendor/bin/sail composer pint:fix./vendor/bin/sail composer analyse# Verificar possíveis refatorações
./vendor/bin/sail composer fix-rector
# Aplicar refatorações
./vendor/bin/sail composer fixPara fazer deploy do projeto em produção:
- Certifique-se de que o servidor atende aos requisitos (PHP 8.3+, MySQL 8.0+, Redis)
- Configure o servidor web (Nginx ou Apache)
- Configure o SSL (recomendado para produção)
git clone https://github.com/guilhermehub12/corelab-api.git
cd corelab-api
composer install --no-dev --optimize-autoloader
cp .env.example .env
# Edite o arquivo .env com as configurações de produção
php artisan key:generatephp artisan migrate --forcephp artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimizeO projeto inclui configuração para GitHub Actions, que:
- Executa testes automaticamente em pull requests
- Faz deploy automático para staging quando um commit é feito na branch
develop - Faz deploy automático para produção quando um commit é feito na branch
main
Solução: Verifique as configurações de banco de dados no arquivo .env e certifique-se de que o banco de dados existe.
./vendor/bin/sail restart
./vendor/bin/sail artisan migrate:fresh --seedSolução: Verifique se o token de API está configurado no arquivo .env e se está sendo enviado corretamente nos headers das requisições.
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/amazing-feature) - Faça commit das suas mudanças (
git commit -m 'Add some amazing feature') - Faça push para a branch (
git push origin feature/amazing-feature) - Abra um Pull Request
- Siga o padrão de codificação do Laravel
- Escreva testes para todas as novas funcionalidades
- Atualize a documentação quando necessário
- Verifique se todos os testes passam antes de enviar um PR
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Desenvolvido com 💙 por Guilherme Delmiro