Loading repository data…
Loading repository data…
mendespann / repository
Essa é a minha proposta de solução para o desafio popular da entrevista da vaga de desenvolvedor do Picpay.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Essa é a minha proposta de solução para o desafio popular da entrevista da vaga de desenvolvedor do Picpay.
Em resumo, o desafio técnico proposto envolve o desenvolvimento de uma aplicação que simula um sistema simplificado de transferência de dinheiro entre dois tipos de usuários: comuns e lojistas.
O desafio encontrado no GitHub do PicPay, originalmente parte do processo de entrevista para a vaga de analista na empresa, ganhou popularidade na internet.
Desde então, sua resolução se tornou uma excelente maneira de aplicar conceitos de API Rest e explorar tecnologias backend. Por isso, decidi resolvê-lo para treinar minhas habilidades.
O desafio pode ser encontrado aqui: https://github.com/PicPay/picpay-desafio-backend
Esses foram os requisitos definidos no enunciado original.
Observação: O serviço se encontra indisponível atualmente. Foi necessário criar um mock novo no mock.io. O mock retorna status http 200.
Observação: O serviço se encontra indisponível atualmente. Foi necessário criar um mock novo no mock.io. O mock retorna status http 200.
Com base no enunciado, escolhi utilizar o framework Spring do Java para desenvolver a solução.
Estruturei o projeto seguindo a Arquitetura Hexagonal. Assim, a lógica de negócios fica no domínio e as conexões com bancos de dados e serviços externos, como os mocks e o Kafka, na camada de infraestrutura.
Essa abordagem mantém o código organizado e facilita a manutenção e evolução do sistema.
A escolha do banco de dados H2 e do Spring Data JPA para este projeto foi motivada por razões como: O H2 é um banco de dados em memória, o que significa que ele é criado e preenchido cada vez que a aplicação é iniciada, e deletado quando a aplicação é encerrada. Além disso, o Spring Data JPA define repositórios para entidades, que fornecem operações comuns de banco de dados. Ainda, H2 e Spring Data JPA tem uma configuração simplificada e funcionam bem juntos.
Além disso, criei 2 novos endpoints: /history para visualizar todas a transaçoes e /users para visualizar os usuários cadastrados.
Por fim, é importante ressaltar que os usuários estão sendo inseridos diretamente no banco, porque não era um requisito do desafio original. A inserção está no script data.sql, e seus ids são gerados automaticamente. Então, uma nova feature a ser implantada é o sistema de cadastro de usuários.
INSERT INTO users (fullname, cpf, email, password, balance, UserTypeEnum) VALUES ('Pamela', '123.456.789-00', 'pamela@hotmail.com', '123', 100.0, 'REGULAR');
INSERT INTO users (fullname, cpf, email, password, balance, UserTypeEnum) VALUES ('Crystal', '123.456.783-00', 'crystal@hotmail.com', '123', 200.0, 'MERCHANT');
A partir do diagrama de contexto, é possível entender melhor o fluxo da aplicação.
Alguns diferenciais que não foram solicitados no desafio:
1.Clonar repositório git:
git clone https://github.com/mendespann/picpay-simplificado.git
2.Instalar dependências.
mvn clean install
3.Executar a aplicação Spring Boot.
4.Testar endpoints através do postman ou da url http://localhost:8080/swagger-ui/index.html#/
Para criar nova transferência:
POST:
POST localhost:8080/transfer
{
"payerId": 1,
"payeeId": 2,
"value": 10.0
}
Para ver histórico de transferências:
GET localhost:8080/history
Para ver usuários cadastrados:
GET localhost:8080/users