Elixir Bank é uma aplicação com propósitos de estudos que simula o processo de criação de uma conta digital.
Elixir Bank é uma aplicação com propósitos de estudos.
Aplicação de Exemplo:
https://app-elixir-banking.herokuapp.com/
Você deve rodar utilizando elixir 1.10.2 e Phoenix 1.4.16
| Recomendo utilizar asdf (plugin de gerenciamento de versão), para instalar o Erlang e o Elixir.
Biblioteca utilizada para lidar com encriptação de dados.
$ iex
32 |> :crypto.strong_rand_bytes() |> Base.encode64()
"aJ7HcM24BcyiwsAvRsa3EG3jcvaFWooyQJ+91OO7bRU="
O base64 gerado precisa estar disponível numa variável de ambiente antes de rodar a aplicação
export CLOAK_KEY="A7x+qcFD9yeRfl3GohiOFZM5bNCdHNu27B0Ozv8X4dE="
A aplicação roda com os dados padrão do postgresql
Usuário: postgres
Senha: postgres
Porém se você seus dados de usuário são diferences simplemente deixo os mesmos disponíveis em variáveis de ambiente.
export POSTGRES_USER=""
export POSTGRES_PASSWORD=""
export POSTGRES_DB=""
export POSTGRES_HOST=""
$ mix deps.get
$ mix ecto.create
$ mix ecto.migrate
$ mix phx.server
Para rodar os testes execute:
$ mix test
$ mix credo
A aplicação foi escrita utilizando 1.10.2 e expoẽ uma API REST através do Phoenix Framework.
Existem dois modelos principais na modelagem, Account
e Inviation
.
Responsável por lidar com os dados relacionados a cada Conta.
PENDING
para COMPLETE
sempre que todos os dados de conta forem todos preenchidos.Accounts
com o mesmo cpf
.Account
muda para COMPLETE
.Responsável por lidar com os convites para criação de novas contas.
Como um usuário com uma Account
com status complete posso fornecer meu código de convite
para que
outros usuários possam criar Accounts
através do mesmo.
ReferralCode
para localizar uma Account
relacionada.referral_account_id
.Expoẽ uma API rest privada, que necessita de um Token válido para realizar requests.
$ iex -S mix
$ {:ok, token, _} = BankWeb.Tokens.AuthenticationToken.generate_and_sign()
$ token # retorna um token válido para ser usado na request
cpf
.Atributos
cpf
String - obrigatóriobirth_date
Stringname
Stringemail
Stringgender
Enum - MALE ou FEMALEstate
Stringcity
Stringcountry
Stringreferral_code
String (precisa ser um código existente válido)| Exemplo de request para criação de conta
Header
authorization Bearer token válido
{
"cpf": "861.370.560-07",
"name": "Paulo Henrique dos Santos Sacramento",
"birth_date": "06/01/2990",
"email": "contato@henriquesacramento.net",
"gender": "MALE",
"state": "BA",
"city": "Teixeira de Freitas",
"country": "BR"
}
Curl:
curl --location --request POST 'http://localhost:4000/api/accounts' \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJKb2tlbiIsImV4cCI6MTU4NzQ5OTAyMSwiaWF0IjoxNTg3NDkxODIxLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJvM3VlcGtrY3NyY3NxZnRqczAwMDA5MSIsIm5iZiI6MTU4NzQ5MTgyMX0.ka_yeOhthqqcISMkQHadUWM_jzzsEMRWfgXirYN44dM' \
--form 'cpf=861.370.560-07' \
--form 'name=Paulo Henrique dos Santos Sacramento' \
--form 'birth_date=06/01/2990' \
--form 'email=contato@henriquesacramento.net' \
--form 'gender=MALE' \
--form 'state=BA' \
--form 'city=Teixeira de Freitas' \
--form 'country=BR'
Retorno esperado
{
"cpf": "861.370.560-07",
"id": "d7cb33af-27c0-41dc-b6f6-67a54766dbc6",
"invitation_code": "OiFWmBsQ",
"name": "Paulo Henrique dos Santos Sacramento",
"status": "COMPLETE"
}
| Exemplo de request utilizando referral_code
{
"cpf": "861.370.560-07",
"name": "Paulo Henrique dos Santos Sacramento",
"birth_date": "06/01/2990",
"email": "contato@henriquesacramento.net",
"gender": "MALE",
"state": "BA",
"city": "Teixeira de Freitas",
"country": "BR",
"referral_code": "ArvBFSHJ"
}
Curl:
curl --location --request POST 'http://localhost:4000/api/accounts' \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJKb2tlbiIsImV4cCI6MTU4NzQ5OTAyMSwiaWF0IjoxNTg3NDkxODIxLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJvM3VlcGtrY3NyY3NxZnRqczAwMDA5MSIsIm5iZiI6MTU4NzQ5MTgyMX0.ka_yeOhthqqcISMkQHadUWM_jzzsEMRWfgXirYN44dM' \
--form 'cpf=279.794.900-53' \
--form 'name=Paulo Henrique dos Santos Sacramento' \
--form 'birth_date=06/01/2990' \
--form 'email=contato@henriquesacramento.net' \
--form 'gender=MALE' \
--form 'state=BA' \
--form 'city=Teixeira de Freitas' \
--form 'country=BR' \
--form 'referral_code=ArvBFSHJ'
Atributos
cpf
String - obrigatório| Exemplo de request para listagem de indicações
Header
authorization Bearer token válido
{
"cpf": "087.493.230-08"
}
Retorno Esperado
```json
[
{
"account_id": "f54452ca-108d-4306-a82d-e607a11f4ac1",
"email": "contato@henriquesacramento.net",
"inserted_at": "2020-04-21T19:12:45"
}
]
Curl:
curl --location --request POST 'http://localhost:4000/api/referrals' \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJKb2tlbiIsImV4cCI6MTU4NzQ5OTAyMSwiaWF0IjoxNTg3NDkxODIxLCJpc3MiOiJKb2tlbiIsImp0aSI6IjJvM3VlcGtrY3NyY3NxZnRqczAwMDA5MSIsIm5iZiI6MTU4NzQ5MTgyMX0.ka_yeOhthqqcISMkQHadUWM_jzzsEMRWfgXirYN44dM' \
--form 'cpf=569.576.010-05'
A melhor maneira de enviar alterações para o Elixir Bank é fazer um fork do nosso repo e abrir um Pull Request.
GitHub possui um guia como enviar um fork pull request no próprio website.
Você pode utilizar o CLI hub para fazer isso.
Da seguinte forma,
Você pode enviar o pull request do seu fork com os seguintes comandos:
$ hub clone phsacramento/elixir-bank
$ cd elixir-bank
$ hub fork
$ git checkout -b fix_readme
$ vim CONTRIBUTING.md
$ git commit CONTRIBUTING.md
$ git push -u <YOUR GITHUB USERNAME> HEAD
$ hub pull-request
Paulo Henrique Sacramento (@phsacramento)