Este teste é parte do processo seletivo aqui no Asaas para posições na Engenharia. O que você precisa fazer, é clonar o repositório, fazer o projeto rodar seguindo as instruções aqui contidas, e implementar as mudanças propostas. Uma vez que tenha concluído, abra um PR apontando para a branch main
deste repositório.
A aplicação é construída em Grails, um framework web baseado em Groovy, construído a partir do Spring Boot. Este framework é bastante amigável e simples de configurar, portanto você não deve enfrentar nenhuma dificuldade ao colocar o projeto para rodar.
Nossa intenção com este teste, é avaliar sua capacidade de modificar e adicionar funcionalidades a um projeto existente, mantendo os padrões existentes e aplicando as melhores práticas de desenvolvimento.
Ao revisar seu código vamos avaliar os seguintes pontos:
- Organização do código.
- Respeito as regras de negócio e modificações propostas.
- Código bem escrito, limpo e coeso.
- Uso correto do versionamento do git.
São necessárias apenas 2 coisas para que este projeto rode: JDK 8 e Grails 4.0.5. Para instalar o Java e o Grails siga as instruções contidas aqui.
Esta aplicação vem pré-configurada para rodar utilizando banco em memória, porém recomendamos utilizar o MySQL pois a cada recompilação o banco em memória é limpo. Basta baixar a última versão do MySQL aqui, e configurar o username
e password
corretos no arquivo application.yml
.
Seguidas estas instruções, você já deve conseguir subir a aplicação acessando a pasta do projeto e executando o comando grails run-app
, e acessar a interface através de http://localhost:8080
Neste projeto, já há um cadastro funcional de clientes (Customer.groovy
) e cobranças (Bill.groovy
), além de algumas regras de negócio implementadas. A partir do que já existe, você deve modificar ou adicionar funcionalidades conforme descrito a seguir.
- Incluir CPF/CNPJ no cadastro do cliente e tornar obrigatório. Validar a algoritmo para que não sejam inseridos clientes com CPF/CNPJ inválido.
- Incluir forma de pagamento no cadastro da cobrança e tornar obrigatório. As formas de pagamentos são: Boleto Bancário, Cartão de Crédito ou Transferência Bancária.
- Soft Delete: atualmente, ao remover um cliente ou cobrança, o registro é fisicamente removido do banco. Este comportamento deve ser mudado para soft-delete afim de ser possível manter histórico dos registros. Criar um atributo
deleted
nos domínios, e defini-lo comotrue
ao remover um registro. Uma vez removido, o registro não deve mais ser exibido em nenhum lugar pela aplicação. - Possibilitar definir uma cobrança como paga e armazenar a data de pagamento. Não permitir exclusão de cobranças pagas.
- Criar um job que rode de segunda sexta, que defina como Vencida todas as cobranças com data de vencimento anterior a hoje e que estejam com situação Pendente.