Avaliação:
Considerações gerais:
O intuito da prova é avaliar de modo geral a capacidade de resolução de problemas e a qualidade do
código (clean code). Não é necessário que o projeto seja entregue por inteiro. O mesmo será avaliado de
acordo com os critérios mencionados. O projeto tem tempo limite de acordo com a vaga a ser pretendida
e será informado no recebimento da prova. Obrigatoriamente a resolução deverá ser entregue para a
avaliação por um link de repositório público (como o GitHub, por exemplo). Para a avaliação, será
analisado o commit mais recente. Caso haja dúvidas sobre o conteúdo da prova ou até mesmo sobre
como implementar alguma de suas atividades, entrar em contato com nossos analistas.
Objetivos:
Montar uma API usando C# preferencialmente ASP.NET Core versão 5.1 (ou superior), com os seguintes
métodos:
Insert
1. Deverá receber como entrada um arquivo Excel (fornecido no teste);
2. Durante o método insert, as seguintes regras devem ser contempladas:
● Todos os campos são obrigatórios;
● O campo data de entrega não pode ser menor ou igual que o dia atual;
● O campo descrição precisa ter o tamanho máximo de 50 caracteres;
● O campo quan dade tem que ser maior do que zero;
● O campo valor unitário deve ser maior que zero e suas casas decimais devem ser
arredondadas matematicamente para duas casas decimais.
3. Caso o lote seja válido: Os dados devem ser salvos em um banco de dados relacional (de sua
escolha), que respeite o tipo de dados e suas validações, e deverá ser adicionado um identificador
único para a importação (ID). O status de retorno deverá ser o 200 e os dados de retorno ficam a
critério do desenvolvedor para facilitar a construção das demais partes.
4. Em caso de erros de validação: a API deverá retornar o status 400 (bad request) com uma lista
de erros, contendo o número da linha do arquivo de Excel e o erro, ou erros, de validação.
GetAllImports
1. Deverá listar todas as importações mostrando o seu identificador criado no método de insert, a
data da importação, o número de itens, a menor data de entrega e o valor total da importação
(Soma dos valores totais dos itens da mesma).
GetImportById
1. Deverá ter como parâmetro de entrada o identificador da importação;
2. Caso existir o parâmetro solicitado, deverá trazer o dado como está na Tabela 1, com o
acréscimo em cada linha da coluna “valor total” (produto de valor unitário multiplicado pela
quantidade);
3. Caso não existir, retornar o status 404 (NotFound).
O que será avaliado:
Modelagem e normalização das entidades;
Implementação da API em RESTful e utilização do Swagger ou OpenAPI;
Codificação limpa;
Conhecimentos em DDD, CQRS e Clean Architecture;
Conhecimentos com Entity Framework – Code Fist;
Criação de regras de validação partir de especificações (Com Fluent Validation);
Performance da solução implementada;
Atomicidade das operações;
Boa sorte!