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