Nesse teste analisaremos seu conhecimento geral e inclusive velocidade de desenvolvimento. Abaixo explicaremos tudo o que será necessário.
O desafio consiste em implementar uma REST API com CRUD usando o framework Laravel 11 e banco de dados MySQL. A Funcionalidade principal é cadastrar, editar e deletar transportadoras, motoristas e caminhões. O Fluxo consiste em, uma Transportadora possui um ou vários motoristas cadastrados, um motorista pode estar cadastrado em uma ou várias Transportadoras e o Motorista possui um ou vários caminhões. Além do CRUD, o sistema deverá disponibilizar a lista dos cadastros que foram realizados.
A modelagem inicial para a implementação solução é a seguinte:
| Nome | Tipo | Nullable |
|---|---|---|
| NomeTransportadora | varchar(100) | false |
| CNPJTransportadora | char(14) | false |
| StatusTransportadora | int | false |
| NomeMotorista | varchar(100) | false |
| CPFMotorista | char(11) | false |
| DataNascimentoMotorista | datetime | false |
| EmailMotorista | varchar(100) | true |
| PlacaCaminhao | char(8) | false |
| ModeloCaminhao | varchar(50) | false |
| CorCaminhao | varchar(50) | false |
Você deve alterar esta modelagem para que a mesma cumpra com as três primeiras formas normais.
Além disso, a implementação deste modelo em um banco de dados relacional deve ser realizada levando em consideração os seguintes requisitos:
- O banco de dados deve ser criado utilizando Migrations do framework Laravel, e também utilizar Seeds para popular as informações no banco de dados.
- Implementação das validações necessárias na camada que julgar melhor.
- Deve existir um relacionamento de caminhão com modelo e motorista, caminhão TEM um modelo e PERTENCE a um motorista
- Deve utilizar o padrão snake_case para o nome das colunas no banco de dados
- Transportadora
- nome: obrigatório
- cnpj: obrigatório | número | 14 digitos | único no banco de dados
- Motorista
- nome: obrigatório
- cpf: obrigatório | número | 11 dígitos | único no banco de dados
- data_nascimento: obrigatório | data
- email: opcional | email
- Caminhão
- motorista: obrigatório
- modelo: obrigatório
- placa: obrigatório | único no banco de dados
- Modelo
- modelo: obrigatório
- cor: obrigatório
- O cadastro de transportadora deve por padrão ser status = 1 ativado. Essa informação não precisar ser passada no request, isso deve ser responsabilidade do backend.
- No cadastro do motorista validar se o mesmo é maior de idade. Caso não seja não permitir o cadastro.
- Gere no mínimo 5 registros de modelos de caminhões para serem usados nos cadastros dos caminhões.
- Opcional e diferencial: usar o Factory
- Listar as transportadoras;
- Altera o status de uma transportadora;
- Cadastrar e listar motoristas cadastrados na transportadora;
- Cadastro e vínculo de caminhões ao motorista;
- Visualizar os caminhões pertencentes a um motorista.
Obs.: Faça o relacionamento das tabelas para que seja possível acessar essas informações via relacionamento.
Devem ser utilizadas as seguintes tecnologias:
- HTML
- CSS
- Javascript
- Framework Laravel (PHP)
- Docker
Para iniciar o teste, faça um fork deste repositório, crie uma branch com o seu nome completo e depois envie-nos o pull request. Se você apenas clonar o repositório não vai conseguir fazer push e depois vai ser mais complicado fazer o pull request.
- Implementar autenticação de usuário na aplicação.
- Permitir que o usuário mude o número de itens por página.
- Permitir remoção em massa de itens nos CRUDs.
- Implementar a camada de Front-End utilizando Vue.JS
- API Rest JSON para todos os CRUDS listados acima.
- Uso de Repository
