A Exchange API é um projeto desenvolvido como parte do curso Back-end Java da Ada no módulo "Arquitetura de Software Ágil I".
A proposta é implementar uma API que permita ao cliente realizar a compra de moedas estrangeiras, como o dólar (USD) e o euro (EUR), de forma simples e eficiente.
-
Cadastro de Clientes: Os clientes podem se cadastrar no sistema fornecendo informações essenciais, como nome, CPF, data de nascimento, estado civil e sexo. Após o cadastro bem-sucedido, o sistema gera um ID de cliente único para cada usuário. Além disso, é possível consultar um cliente por meio do seu CPF.
-
Registro de Ordem de Compra: Após o cadastro, os clientes podem registrar ordens de compra de moeda estrangeira. Cada ordem de compra inclui informações como CPF do cliente, tipo de moeda desejada (USD ou EUR), valor em moeda estrangeira e número da agência onde a retirada ocorrerá.
-
Cálculo da Cotação da Moeda: A API calcula o valor total com base na cotação da moeda, multiplicando-a pelo valor desejado de compra. Para isso, faz uma chamada à API externa economia.awesomeapi.com.br com a sigla da moeda desejada (USD ou EUR). Caso o cliente tente comprar outra moeda que não seja USD ou EUR, a API lançará uma exceção.
- Linguagem de Programação: Java
- Framework: Spring Boot
- Banco de Dados: PostgreSQL
- Arquitetura: O projeto segue os princípios de SOLID e adota o padrão de arquitetura MVC (Model-View-Controller).
- Metodologia de Desenvolvimento: Scrum
- Gerenciamento do Projeto: Trello
- Clone o repositório em uma pasta de preferência
git@github.com:nataliagiacobo/exchangeAPI.git
- Entre na pasta que você acabou de clonar e instale as dependências
mvn install
- Visualize a interface da API utilizando o Thunder Client, Postman, Insomnia ou outra plataforma de sua preferência
Acesso ao Swagger UI (Opcional)
Se preferir, você pode explorar e testar os endpoints da API acessando o Swagger UI.
Certifique-se de que o projeto esteja em execução e acesse a URL abaixo pelo seu navegador:
http://localhost:8080/swagger-ui/index.html#/
Autenticação (POST)
Método | Funcionalidade | URL |
---|---|---|
POST |
Realiza o login de um cliente cadastrado | http://localhost:8080/login |
A estrutura do body da requisição deverá seguir o padrão abaixo:
{
"cpf": "String",
"password": "String"
}
Um exemplo de resposta bem-sucedida com status 200
é:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
❌ A requisição irá falhar se as informações do usuário estiverem incorretas ou não houver cadastro prévio.
O endpoint retornará um erro 401
com a mensagem: { "Authentication failed. Please check your login information and try again." }
Cadastro (POST)
Método | Funcionalidade | URL |
---|---|---|
POST |
Realiza o cadastro do cliente no sistema | http://localhost:8080/customer |
⚠️ Os atributos "maritalStatus" e "sex" aceitam somente valores pré-estabelecidos
A estrutura do body da requisição deverá seguir o padrão abaixo:
{
"name": "String",
"cpf": "String", // 11 dígitos do CPF sem os separadores '12345678901'
"birthDate": "Date", // Seguir o padrão 'YYYY-MM-DD'
"maritalStatus": "MaritalStatus", // Valores possíveis: "SINGLE", "MARRIED", "DIVORCED", "WIDOWED"
"sex": "Sex" // Valores possíveis: "MALE", "FEMALE", "OTHER"
"password": "String"
}
Um exemplo de resposta bem-sucedida com status 200
é:
{
"id": 1
}
❌ A requisição irá falhar se algum dos atributos não for preenchido corretamente ou esteja ausente.
O endpoint retornará um erro 400
com uma mensagem referente. Exemplo: { "Name is required" }
Consultas (GET)
Método | Funcionalidade | URL |
---|---|---|
GET |
Consulta todos os clientes cadastrados | http://localhost:8080/customer |
Um exemplo de resposta bem-sucedida com status 200
é:
[
{
"id": 1,
"name": "Ana",
"birthDate": "1990-05-15",
"maritalStatus": "MARRIED",
"sex": "FEMALE"
},
// Outros clientes...
]
O endpoint retornará um erro
400
com a mensagem: { "You must save a new customer first" }
Método | Funcionalidade | URL |
---|---|---|
GET |
Realiza a consulta do cliente pelo seu cpf | http://localhost:8080/customer/cpf/{cpf} |
Um exemplo de resposta bem-sucedida com status 200
é:
{
"id": 1,
"name": "Ana",
"birthDate": "1990-05-15",
"maritalStatus": "MARRIED",
"sex": "FEMALE"
}
❌ A requisição irá falhar se o CPF utilizado para consulta não estiver associado a nenhum cliente cadastrado.
O endpoint retornará um erro 404
com a mensagem: { "CPF not found" }
Atualização (PUT)
Método | Funcionalidade | URL |
---|---|---|
PUT |
Atualiza as informações de um cliente existente | http://localhost:8080/customer/{id} |
⚠️ Qualquer atributo pode ser atualizado, porém todos devem ser escritos, mesmo quando não houver alteração
A estrutura do body da requisição deve seguir o padrão do exemplo abaixo:
{
"name": "Novo Nome da Cliente",
"birthDate": "1990-05-15",
"maritalStatus": "MARRIED",
"sex": "FEMALE"
}
Um exemplo de resposta bem-sucedida com status 200
é:
{
"id": 1,
"name": "Maria",
"birthDate": "1990-05-15",
"maritalStatus": "MARRIED",
"sex": "FEMALE"
}
❌ A requisição irá falhar se algum dos atributos não for preenchido corretamente ou esteja ausente.
O endpoint retornará um erro 400
com uma mensagem referente. Exemplo: { "Cpf is required" }
Exclusão (DELETE)
Método | Funcionalidade | URL |
---|---|---|
DELETE |
Remove um cliente existente | http://localhost:8080/customer/{id} |
- Para deletar um cliente, especifique o id
desejado na URL, conforme mostrado acima. Não é necessário incluir um corpo de requisição, pois a ação de exclusão é baseada no id
fornecido.
❌ A requisição irá falhar se o ID não estiver associado a nenhum cliente cadastrado.
O endpoint retornará um erro 404
Cadastro (POST)
Método | Funcionalidade | URL |
---|---|---|
POST |
Realiza a ordem de compra da moeda desejada | http://localhost:8080/order |
⚠️ O atributo "currency" aceita somente valores pré-estabelecidos
A estrutura do body da requisição deverá seguir o padrão abaixo:
{
"cpf": "String",
"currency": "String", // Valores possíveis: "USD" ou "EUR"
"exchangeAmount": "BigDecimal",
"bankBranch": "String"
}
Um exemplo de resposta bem-sucedida com status 201
é:
{
"orderId": 1,
"customerId": 1,
"cpf": "43488428095",
"currency": "EUR",
"exchangeAmount": 100.0,
"quotation": 6.5857,
"operationCost": 658.57,
"bankBranch": "7057"
"orderTimestamp": "2021-08-27T16:11:23.866",
}
❌ A requisição irá falhar se o campo "currency"
não for um dos valores válidos ("USD" ou "EUR").
O endpoint retornará um erro 400
com a mensagem: { "Currency must be USD or EUR" }
Consulta (GET)
Método | Funcionalidade | URL |
---|---|---|
GET |
Realiza a consulta das ordens de compra pelo cpf do cliente | http://localhost:8080/order/cpf/{cpf} |
Um exemplo de resposta bem-sucedida com status 200
é:
{
"id": 1,
"name": "Ana",
"birthDate": "1990-05-15",
"maritalStatus": "MARRIED",
"sex": "FEMALE"
}
❌ A requisição irá falhar se o CPF utilizado para consulta não estiver associado a nenhum cliente cadastrado.
O endpoint retornará um erro 404
com a mensagem: { "CPF not found" }
O desenvolvimento da Exchange API foi um esforço colaborativo realizado por Dayane, Juliana, Karen, Natalia, Raquel e Thaís.