Esta API foi desenvolvida com o intuito de simular transações bancárias entre usuários, procurando utilizar o padrão arquitetural da Clean Architecture (https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html).
Faça um clone do repostório da aplicação em sua máquina
Abra o terminal de sua preferência e execute o comando abaixo.
git clone https://github.com/refortunato/AppFinance.gitCaso não tenha o docker instalado, neste link é possivel encontrar a opção para fazer download para desktop para seu respctivo sistema operacional. https://docs.docker.com/desktop/
Após baixar o repostório, entre no diretório da aplicação e execute o comando abaixo para o docker-compose subir os containers.
docker-compose up --buildIsso deve levar alguns segundos. Caso ocorra algum erro, certifique-se de que as portas 8888 e 3309 não estejam ocupadas com alguma aplicação.
Execute o comando abaixo dentro do diretório da aplicação para o composer baixar as dependências.
composer installImporte o arquivo database.sql que está na raíz do projeto para seu banco de dados MySql, isso fará com que as tabelas sejam criadas. Você poderá fazer isso utilizando PHPMyAdmin ou MySqlWorkbench (https://dev.mysql.com/downloads/workbench/).
As strings de conexão com o banco de dados podem ser encontradas no script /src/Config/database.php ou no aquivo docker-compose.yml.
Caso queira acessar através do host, você pode utilizar as strings abaixo:
SERVER: localhost
PORT: 3309
USER: finance
PASSWORD: finance010203
Tendo em vista que os containers já estejam rodando corretamente, a url abaixo o direcionará para a API :
http://localhost:8888Básicamente, para conseguirmos fazer uso da API, precisamos seguir o seguinte fluxo:
- Criar usuário(s) comum (pois são os únicos que poderão realizar transferências).
- (Opcional) Criar usuários lojistas.
- Realizar Login para obter o token de autenticação.
- Consumir EndPoint para realizar transferência.
- Visualizar transferências relacionadas aos usuários (tanto na origem quanto no destino).
Logo abaixo, estão as descrições dos EndPoints disponíveis para o consumo da API.
POST /common-userEnviar uma requisição com os campos abaixo formatados em JSON.
| Parâmetro | Tipo | Descrição |
|---|---|---|
name |
string |
Obrigatório. Nome do usuário |
cpf_cnpj |
string |
Obrigatório. CPF/CNPJ do usuário |
email |
string |
Obrigatório. E-mail do usuário |
password |
string |
Obrigatório. Senha do usuário (min. de 8 caracteres) |
repeat_password |
string |
Obrigatório. Senha do usuário (min. de 8 caracteres) |
| Campo | Descrição |
|---|---|
user_id |
Id do usuário |
user_name |
Nome do usuário |
cpf |
CPF do usuário |
cnpj |
CPF do usuário |
email |
E-mail do usuário |
POST /store-userEnviar uma requisição com os campos abaixo formatados em JSON.
| Parâmetro | Tipo | Descrição |
|---|---|---|
name |
string |
Obrigatório. Nome do usuário |
cpf_cnpj |
string |
Obrigatório. CPF/CNPJ do usuário |
email |
string |
Obrigatório. E-mail do usuário |
password |
string |
Obrigatório. Senha do usuário (min. de 8 caracteres) |
repeat_password |
string |
Obrigatório. Senha do usuário (min. de 8 caracteres) |
| Campo | Descrição |
|---|---|
user_id |
Id do usuário |
user_name |
Nome do usuário |
cpf |
CPF do usuário |
cnpj |
CPF do usuário |
email |
E-mail do usuário |
POST /loginEnviar uma requisição com os campos abaixo formatados em JSON.
| Parâmetro | Tipo | Descrição |
|---|---|---|
email |
string |
Obrigatório. E-mail do usuário |
password |
string |
Obrigatório. Senha do usuário |
| Campo | Descrição |
|---|---|
token |
JWT para autenticação |
EndPoint onde usuários comuns podem realizar transferência para outros usuários comuns ou lojistas.
Usuário lojista não poderá efeturar transferência.
POST /transferDeve ser informado o token obtido ne endPoint de login, no header da requisição.
Authorization: Bearer <token>Enviar uma requisição com os campos abaixo formatados em JSON.
| Parâmetro | Tipo | Descrição |
|---|---|---|
destiny_account_id |
string |
Obrigatório. ID do usuário destino. |
value |
float |
Obrigatório. Valor a ser transferidos. |
| Campo | Descrição |
|---|---|
id |
ID da transação |
run_date |
Data da transação |
origin_account_id |
ID do usuário onde foi subtraído o valor para efeturar a transação |
destiny_account_id |
ID do usuário para onde o valor foi transferido |
transaction_type |
Tipo da transação |
origin_transaction_id |
ID da transação que originou a transação atual (campo utilizado para quando a transação for um estorno). Caso não haja, será retornado null |
value |
Valor da transação |
EndPoint para obter todas as transações realcionadas a um usuário.
GET /account-transactionsDeve ser informado o token obtido ne endPoint de login, no header da requisição.
Authorization: Bearer <token>Será retornada uma lista com os seguintes campos:
| Campo | Descrição |
|---|---|
id |
ID da transação |
run_date |
Data da transação |
origin_account_id |
ID do usuário onde foi subtraído o valor para efeturar a transação |
destiny_account_id |
ID do usuário para onde o valor foi transferido |
transaction_type |
Tipo da transação |
origin_transaction_id |
ID da transação que originou a transação atual (campo utilizado para quando a transação for um estorno). Caso não haja, será retornado null |
value |
Valor da transação |
Back-end: PHP8.1, Nginx
Frameworks: Slim4 (https://www.slimframework.com/docs/v4/)
Banco de dados: MySql
