Skip to content

Latest commit

 

History

History
173 lines (110 loc) · 6.22 KB

README.md

File metadata and controls

173 lines (110 loc) · 6.22 KB

Documentação PocketPay

Índice

Escopo

Uma WebAPI onde pessoas físicas e jurídicas possam sacar, depositar e fazer transferências entre si.

Funcionalidades

Os usuários podem:

  1. Se inscrever no PocketPay;
  2. Logar no aplicativo;
  3. Sacar dinheiro da sua carteira;
  4. Depositar dinheiro na sua carteira;
  5. Transferir dinheiro para outros usuários;
  6. Receber dinheiro de outros usuários;
  7. Consultar todas as suas transferências, saques e depósitos;

Links Úteis

Estrutura do Projeto

O Pocketpay usa o ASP.NET MVC e o Entity Framework em sua construção. O projeto é divido em diversas classes, sendo elas:

  • Controllers: recebem as requisições do usuário e enviam respostas;
  • DTO's: representam o corpo das requisições e respostas;
  • Models: representam as tabelas do banco de dados;
  • Repositories: possuem métodos para interação com o banco de dados (FindBy, Create, Update, etc.);
  • Interfaces: usadas para definir os métodos das repositories;
  • Enums: conjunto de opções para algum atributo (eg. tipo de usuário);
  • Services: serviços da aplicação (autorização JWT e logging);

Criação de Usuários

Endpoints

/api/v1/client/register
/api/v1/seller/register

Arquivos Relacionados

No PocketPay, todo usuário deve ter uma conta (Account). Essa conta contém apenas email, senha e o tipo de usuário (Seller ou Client, definido em AccountRole).

Cada conta possui um perfil, podendo ser Vendedor (Seller) ou Cliente (Client). Esse perfil contém as informações pessoais do usuário, como nome, sobrenome, cpf, etc.

Além do perfil, todo usuário também possui uma carteira (Wallet), que contém o saldo da pessoa dentro do app.

Todos esses atributos são criados no momento de inscrição do usuário na plataforma.

Depois de criado o usuário, ele deverá se autenticar para conseguir um token de acesso.

Autenticação e Autorização

Endpoints

/api/v1/client/login
/api/v1/seller/login

Arquivos Relacionados

A autenticação é feita através da tecnologia JWT (JSON Web Token).

De forma resumida, o usuário entra com as suas credenciais em um dos endpoints de login e recebe um access_token, com o qual poderá acessar as informações da sua conta, fazer saques, depósitos e transferências.

Esse token possui o email e o tipo do usuário, ambos validados e assinados digitalmente pelo servidor.

Em rotas restritas (que possuem a anotação [Authorize]), o token deve ser passado no header Authorization, usando o atributo Bearer:

Authorization: Bearer JzdWIiOiIxMjM0NTY3 [...]

Transações

Endpoints

/api/v1/transaction

Arquivos Relacionados

Transação é o tipo mais básico de operação bancária dentro do PocketPay. Ela é usada para construir todas as outras transações (saques, depósitos e transferências).

Toda transação possui um dono (Owner) e uma data de criação (Timestamp).

Obs: uma transação nunca é criada sozinha. Sempre é necessário atrelar ela a alguma operação.

Depósitos

Endpoints

/api/v1/deposit

Arquivos Relacionados

Para começar a usar dinheiro dentro do PocketPay, o usuário deve depositar dinheiro em sua carteira. No atual estágio de desenvolvimento, o usuário apenas deve passar a quantia especificada no corpo da requisição.

Saques

Endpoints

/api/v1/withdraw

Arquivos Relacionados

Após receber algumas transferências (ou após estar de saco cheio do PocketPay), o usuário poderá sacar o dinheiro disponível na sua carteira. O Pocketpay apenas permitirá tal transação se o usuário tiver saldo suficiente em conta.

Transferências

Endpoints

/api/v1/transferences

Arquivos Relacionados

Aqui reside o charme do PocketPay - as transferências. Dentro da plataforma, os usuários poderão trasnferir dinheiro uns para os outros (independente do tipo da conta!). Da mesma forma que no saque, os usuários somente poderão realizá-la se tiverem dinheiro suficiente em conta.

Para transferir para outro usuário, deve-se informar o endereço de email e o valor desejado.

Tecnologias Utilizadas

  1. Dotnet
  2. ASP.NET
  3. Entity Framework
  4. JWT (JSON Web Token)
  5. SQLite3
  6. Bcrypt