O objetivo é desenvolver uma API REST para controle de notas fiscais dos usuários. Principais funcionalidades incluem:
- Endpoints para cadastro e login de usuários
- CRUD para gerenciamento de notas fiscais
- Restrição de acesso às APIs de notas fiscais apenas para usuários autenticados
- Cada nota só pode ser acessada pelo usuário que a criou
- Envio de email para o usuário ao criar uma nota fiscal
- Retornos de response e HTTP status code adequados
A nota fiscal deve conter campos obrigatórios e passar por validações específicas:
numero
: Identificador único do documento (String)valor
: Valor da nota fiscal (Numérico)data_emissao
: Dia da emissão do documento (Data)cnpj_remetente
: Identificador do remetente da nota (String, 9 dígitos, válido, não no futuro)nome_remetente
: Nome do remetente da nota (String, até 100 caracteres)cnpj_transportador
: Identificador do transportador da nota (String, válido)nome_transportador
: Nome do transportador da nota (String, até 100 caracteres)
-
Arquitetura em Camadas: Utilização de uma estrutura organizada em camadas como Presentation, Application, Domain e Infrastructure para separar as responsabilidades e facilitar o desenvolvimento e manutenção do código.
-
Princípios SOLID: Aplicação de alguns princípios do SOLID para garantir um código mais coeso e extensível.
-
Design Patterns: Utilização de alguns Design Patterns para resolver desafios de design comuns.
-
Geração de PDF: Foi incorporada a capacidade de criar documentos em formato PDF a partir dos dados do sistema. Isso permite a geração dinâmica de relatórios ou documentos essenciais para o usuário ou processos internos.
-
Storage: Foi implementado um serviço para gerenciar o armazenamento e o acesso aos documentos do sistema por meio de soluções de storage, como armazenamento em nuvem, bancos de dados ou sistemas de arquivos locais.
Algumas sugestões para a realização do teste:
- Utilizar Form Request para validações dos campos das APIs
- Implementar camada de transformação dos dados com Api Resources
- Restringir acesso utilizando Polices e/ou Gates
- Utilizar Notifications para envio de emails e coloque-os em fila para disparo assíncrono
- Desenvolver testes automatizados
- Criar documentação da API usando Postman, Swagger ou outras ferramentas de preferência
Para executar o projeto localmente, siga os passos abaixo:
- Docker
- Clone o repositório
- Configure o ambiente de acordo com o .env.example
cp .env.example .env
- Instalar as dependências do composer
docker run --rm \ -u "$(id -u):$(id -g)" \ -v "$(pwd):/var/www/html" \ -w /var/www/html \ laravelsail/php83-composer:latest \ composer install --ignore-platform-reqs
- Inicie o projeto com docker
./vendor/bin/sail up
- Execute as migrações do banco
./vendor/bin/sail artisan migrate
A documentação completa da API está disponível aqui.