Desenvolver uma API REST para um sistema de vagas de emprego, onde empresas podem gerenciar suas vagas e candidatos podem visualizar e se candidatar às vagas disponíveis.
- Laravel 10+
- PHP 8.1+
- MySQL/PostgreSQL
O projeto segue uma arquitetura em camadas para melhor organização do código e separação de responsabilidades:
- Controllers: Camada de controle das requisições.
- Services: Responsável pelas regras de negócio.
- DTOs: Utilizado para entrada de dados complexos, com propriedades tipadas.
- Resources: Transformação das respostas da API.
- Models: Representação dos dados do sistema.
- Database: Contém migrations e seeders para estrutura e dados de teste.
- Tests: Cobertura de testes para garantir a funcionalidade.
-
Criar Vaga
- Endpoint:
POST /api/jobs
- Validação via
FormRequest
- Campos obrigatórios: título, descrição, faixa salarial (min/max), requisitos, benefícios
- Retorna:
VacancyResource
com os dados da vaga criada.
- Endpoint:
-
Atualizar Vaga
- Endpoint:
PUT /api/jobs/{id}
- Verifica se a vaga pertence à empresa e impede atualização caso haja candidatos.
- Retorna:
VacancyResource
atualizado.
- Endpoint:
-
Listar Vagas da Empresa
- Endpoint:
GET /api/jobs
- Paginação obrigatória e filtros opcionais por status e data de criação.
- Retorna:
VacancyCollection
com informações da vaga e número de candidatos.
- Endpoint:
-
Deletar Vaga
- Endpoint:
DELETE /api/jobs/{id}
- Realiza soft delete, não permitindo deleção se houver candidatos.
- Endpoint:
-
Listar Vagas Disponíveis
- Endpoint:
GET /api/jobs/available
- Paginação obrigatória e filtros opcionais por faixa salarial e palavra-chave.
- Não mostra vagas inativas.
- Retorna:
VacancyCollection
com vagas disponíveis.
- Endpoint:
-
Candidatar-se à Vaga
- Endpoint:
POST /api/jobs/{id}/apply
- Valida se a vaga está ativa e se o candidato não está previamente aplicado.
- Implementa toggle de candidatura.
- Retorna:
ApplicationResource
com status da candidatura.
- Endpoint:
-
Listar Minhas Candidaturas
- Endpoint:
GET /api/applications
- Retorna:
ApplicationCollection
com informações das vagas e datas de candidatura.
- Endpoint:
- Resources:
VacancyResource
eVacancyCollection
para padronizar as respostas das vagas,ApplicationResource
eApplicationCollection
para candidaturas. - DTOs: Criados para entradas de dados complexas com propriedades tipadas.
- Database: Migrations e seeders para estrutura e dados de teste.
- Testes de Integração: Cobertura de criação, atualização e processo de candidatura, validando o formato de respostas.
O projeto utiliza Docker para rodar o PostgreSQL. Um arquivo docker-compose.yml
está disponível no repositório Git, facilitando a inicialização do ambiente.
- Clone o repositório.
- Execute
docker-compose up -d
para iniciar o PostgreSQL. - Instale as dependências com
composer install
. - Configure o arquivo
.env
para apontar para o banco de dados no Docker. - Execute as migrations com
php artisan migrate
. - Inicie o servidor com
php artisan serve
.