Uma WebAPI onde pessoas físicas e jurídicas possam sacar, depositar e fazer transferências entre si.
Os usuários podem:
- Se inscrever no PocketPay;
- Logar no aplicativo;
- Sacar dinheiro da sua carteira;
- Depositar dinheiro na sua carteira;
- Transferir dinheiro para outros usuários;
- Receber dinheiro de outros usuários;
- Consultar todas as suas transferências, saques e depósitos;
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);
/api/v1/client/register
/api/v1/seller/register
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.
/api/v1/client/login
/api/v1/seller/login
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 [...]
/api/v1/transaction
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.
/api/v1/deposit
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.
/api/v1/withdraw
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.
/api/v1/transferences
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.