Este repositório contém uns desafios de back-end proposto por algumas empresas.
Os desafios são divididos em pastas.
Este repositório contém a implementação do desafio técnico proposto pela PicPay para a vaga de back-end.
O desafio consiste em criar uma API REST para realizar transferências entre usuários. As principais funcionalidades são:
- Cadastro de novo usuário
- Listar todos os usuários cadastrados
- Realiza transferência entre usuários
- Java 17
- Spring Boot
- Maven
- Banco de dados H2
- Controller: Controllers REST que expõem os endpoints da API
- Service: Camada de serviços, contendo a lógica de negócio
- Repository: Camada de acesso ao banco de dados H2
- DTO: Objetos de transferência de dados
- Exception: Tratamento de exceções personalizadas
Para executar o projeto na sua máquina, siga os passos abaixo:
1. Clone o repositório
https://github.com/Cry199/Desafios-Back-end.git
2. Navegue até a pasta do projeto
cd Desafios\picpaydesafiobackend
3. Execute o comando para build
mvn clean install
4. Execute a aplicação
mvn spring-boot:run
A API estará disponível em http://localhost:8080
.
5. Acesse os endpoints
Agora você pode acessar os endpoints da API no seu navegador ou ferramenta como Postman.
Por exemplo, para cadastrar um novo usuário:
POST /users
{ "firstName": "Teste", "lastName": "Teste", "document": "122345671223", "email": "teste@gmail.com", "userType": "COMMON", "balance": 10, "password": "Teste" }
As rotas da API são:
POST /users
- Cadastro de novo usuárioGET /users
- Listar todos os usuários cadastradosPOST /transfers
- Realiza transferência entre usuários
Rota para cadastro de novo usuário.
Request body: Objeto JSON representando um usuário com os campos firstName, lastName, document, email, userType, balance e password.
Exemplo de request body:
{ "firstName": "Cauã", "lastName": "Ribeiro", "document": "122345671223", "email": "teste@gmail.com", "userType": "COMMON", "balance": 10, "password": "senha" }
Response: Objeto JSON representando o usuário criado, contendo os campos id e demais campos submetidos no cadastro.
Exemplo de response:
{ "id": 1, "firstName": "Cauã", "lastName": "Ribeiro", "document": "122345671223", "email": "teste@gmail.com", "password": "senha", "balance": 10, "userType": "COMMON" }
Rota para listar todos os usuários cadastrados.
Parâmetros: Nenhum
Response: Array de objetos JSON representando os usuários.
Exemplo de response:
[ { "id": 1, "firstName": "Cauã", //...demais campos }, { "id": 2, "firstName": "Helo", //...demais campos } ]
Rota para realizar transferência entre contas.
Request body: Objeto JSON representando a transferência, com os campos amount, sender e receiver.
Exemplo de request body:
{ "senderId": 1, "receiverId": 2,"value": 1}
Response: Objeto JSON representando transferência efectuada, incluindo o campo timestamp.
Exemplo de response:
{"id":1,"anount":1,"sender":{"id":2,"firstName":"Cauã","lastName":"Ribeiro","document":"122345671223","email":"teste@gmail.com","password":"senha","balance":9.00,"userType":"COMMON"},"receiver":{"id":3,"firstName":"Helo","lastName":"Ribeiro","document":"12234567","email":"teste1@gmail.com","password":"senha","balance":11.00,"userType":"COMMON"},"timestamp":"2023-10-18T15:59:05.1549889"}
- Implementar mais validações customizadas para aprender sobre Bean Validation.
- Adicionar documentação Swagger para praticar documentação de APIs.
- Habilitar métricas e endpoints do Spring Boot Actuator para monitoramento.
- Migrar para MySQL/PostgreSQL para praticar SQL e um banco relacional.
- Implementar um reposítório CRUD customizado para praticar acesso a dados.
- Escrever testes unitários em JUnit para classes críticas.
- Testar o repository com dados mockados para isolar a camada.
- Automatizar a build e testes com Maven lifecycle.
- Refatorar o código para reduzir duplicação.
- Melhorar modularização seguindo princípios SOLID.
- Aplicar Design Patterns para desacoplar components.
- Containerizar a aplicação em um Dockerfile para aprender sobre containers.
- Automatizar o processo de build em um pipeline simples.
- Fazer deploy da aplicação na nuvem para conhecer cloud providers.
Este projeto foi desenvolvido como parte do desafio proposto pela PicPay. Foi um excelente exercício para praticar boas práticas de API REST com Spring Boot e documentação.
Em Construção (❁´◡`❁)
Criado por Cry199 como material de estudo.