Aplicação full stack de lista de tarefas pessoais, desenvolvida como parte de um desafio técnico para processo seletivo. O projeto separa backend (API REST) e frontend (SPA), permitindo autenticação de usuários, gerenciamento completo de tarefas e notificações no Slack ao concluir uma tarefa.
Este repositório documenta a solução entregue no contexto de uma vaga de emprego. O objetivo foi demonstrar domínio de:
- API REST com Laravel (validação, autenticação, autorização e integrações)
- Interface com React (rotas protegidas, formulários e consumo de API)
- Boas práticas como Form Requests, Policies/Gates, Sanctum e organização em camadas
- Cadastro e login de usuários
- Autenticação via token Bearer (Laravel Sanctum)
- CRUD de tarefas vinculadas ao usuário autenticado
- Marcar tarefa como concluída ou pendente
- Autorização por Policy e Gates (usuário só altera/remove suas próprias tarefas)
- Validação de dados no backend (Form Requests) e no frontend (Formik + Yup)
- Notificação no Slack quando uma tarefa é marcada como concluída
- Rotas privadas no frontend (redirecionamento para login sem token)
- Seeders com usuários e tarefas de exemplo (Faker)
| Camada | Tecnologias |
|---|---|
| Backend | PHP 8.1+, Laravel 10, Laravel Sanctum, MySQL |
| Frontend | React 18, React Router 6, Formik, Yup, Tailwind CSS, js-cookie, react-toastify |
| Integração | Fetch API, CORS, notificações Slack |
desafio_laravel_react/
├── backend/ # API Laravel
│ ├── app/
│ │ ├── Http/Controllers/ # AuthController, TaskController
│ │ ├── Http/Requests/ # Validação de login, registro e tarefas
│ │ ├── Models/ # User, Task
│ │ ├── Policies/ # TaskPolicy
│ │ └── Notifications/ # SlackNotification
│ ├── database/migrations/
│ └── routes/api.php
└── frontend/ # SPA React (Create React App)
├── src/
│ ├── Components/
│ ├── Pages/ # Welcome, Login, Register, Tasks
│ ├── Services/Api.js # Cliente HTTP da API
│ └── Helpers/
└── public/
- PHP >= 8.1 com extensões comuns do Laravel
- Composer
- Node.js e npm
- MySQL (ou outro banco compatível com Laravel)
- (Opcional) Workspace e bot no Slack para notificações
cd backend
composer install
cp .env.example .env
php artisan key:generateConfigure o banco no arquivo .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=backend
DB_USERNAME=root
DB_PASSWORD=sua_senhaCrie o banco de dados e rode as migrations (e seeders, se desejar dados de teste):
php artisan migrate
php artisan db:seed # opcional: 10 usuários com 5 tarefas cada
php artisan serve # API em http://localhost:8000Em outro terminal:
cd frontend
npm install
npm start # App em http://localhost:3000A URL base da API está definida em frontend/src/Services/Api.js como http://localhost:8000/api/. Ajuste se o backend rodar em outra porta ou host.
Para receber notificações ao concluir tarefas, configure no .env do backend:
SLACK_BOT_USER_OAUTH_TOKEN=seu_token_do_bot
SLACK_BOT_USER_DEFAULT_CHANNEL=id_ou_nome_do_canalSem essas variáveis, a conclusão de tarefas continua funcionando; apenas a notificação no Slack não será enviada.
Todas as rotas de tarefas exigem o header Authorization: Bearer {token} (token retornado no login).
| Método | Rota | Descrição |
|---|---|---|
POST |
/api/register |
Cadastro de usuário |
POST |
/api/login |
Login (retorna token Sanctum) |
GET |
/api/tasks |
Lista tarefas do usuário autenticado |
POST |
/api/tasks |
Cria nova tarefa |
GET |
/api/tasks/{id} |
Exibe uma tarefa |
PUT |
/api/tasks/{id} |
Atualiza tarefa |
DELETE |
/api/tasks/{id} |
Remove tarefa |
PUT |
/api/tasks/{id}/update-status |
Altera status completed (0 ou 1) |
{
"task": "Estudar Laravel Sanctum",
"description": "Revisar documentação de autenticação por token"
}{
"completed": 1
}users
name,email,passwordrole:admin|manager|user(padrão no cadastro:user)
tasks
task(título),description,completed(boolean)user_id(FK parausers)
- Sanctum: tokens com ability baseada no
roledo usuário (userno registro padrão). - TaskPolicy: regras para criar, editar, excluir e alterar status apenas nas tarefas do próprio usuário.
- Gates registrados em
AuthServiceProvider(createTask,updateTask,deleteTask,updateTaskStatus). - No frontend, o token é armazenado em cookie (
js-cookie) e rotas/taskssão protegidas por componentePrivateRoute.
- Usuário acessa a página inicial e pode ir para login ou registro.
- Após login bem-sucedido, o token é salvo e o usuário é redirecionado para
/tasks. - Na lista de tarefas é possível criar, editar, excluir e marcar como concluída.
- Ao marcar como concluída (
completed = 1), o backend disparaSlackNotificationpara o canal configurado.
Backend
php artisan migrate:fresh --seed # recria banco e popula dados
php artisan test # testes PHPUnitFrontend
npm run build # build de produção
npm test # testes (Jest / Testing Library)- O CORS está configurado para aceitar requisições do frontend em desenvolvimento (
config/cors.php). - Mensagens de validação da API estão em português.
- Os READMEs dentro de
backend/efrontend/são os padrão do Laravel e Create React App; este arquivo na raiz concentra a documentação do desafio como um todo.
Projeto desenvolvido para fins de avaliação técnica. Consulte os arquivos de licença dos frameworks utilizados (Laravel — MIT, React — conforme package.json).