RESTFUL API for a digital bank, demonstrating knowledge in backend development, HTTP protocols, authentication and authorization, REST design, MVC architecture and application of business rules
- Endpoints protected by JWT authentication;
- Creating new users and accounts (Natural and Legal);
- Apply for card and loans upon approval;
- Allow transfers between existing accounts;
- Allow installments of purchases;
- Allow installments payment;
- Transaction history;
- Python π
- Django
- Django REST Framework
- Djoser
- Jazzmin
- Docker π³
- Insomnia
Setup the environment variables according to .env.example
IP = ''
PORT = ''
SECRET_KEY = ''
DEBUG = ''
ALLOWED_HOSTS = ''
DB_ENGINE = ''
POSTGRES_DB = ''
POSTGRES_USER = ''
POSTGRES_PASSWORD = ''
POSTGRES_HOST = ''
POSTGRES_PORT = ''
Run the command below to generate de Django Secret Key
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
With Docker conatiners π³
docker-compose build
docker-compose up
or with virtual environment
py -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
Run the server and populate
py client.py
This command does everything you need to prepare the django environment: - makemigrations - migrate - runserver - create superuser - database population
If endpoint has authorization=True
use {"Authorization": "Bearer <jwt.access>"}
authorization=False
/api/v1/auth/users/
POST METHOD
{
"register_number": <int>,
"picture": "<str>",
"password": "<str>"
}
authorization=False
/api/v1/auth/jwt/create/
POST METHOD
{
"register_number": <int>,
"password": "<str>"
}
RETRUN EXAMPLE
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}
You need the {"access": "jwt"}
authorization=True
/api/v1/natural-people/
POST METHOD
{
"user": <user_RN_fk>,
"name": "<str>",
"birth_date": "<yyyy-mm-dd>",
"cpf": "<str>",
"rg": "<str>",
"social_name": "<str>"
}
authorization=True
/api/v1/legal-people/
POST METHOD
{
"user": <user_RN_fk>,
"fantasy_name": "<str>",
"establishment_date": "<yyyy-mm-dd>",
"cnpj": "<str>",
"municipal_registration": "<str>",
"state_registration": "<str>",
"legal_nature": "<str>"
}
authorization=True
/api/v1/addresses/
POST METHOD
{
"user": <user_RN_fk>,
"street": "<str>",
"number": "<str>",
"neighborhood": "<str>",
"city": "<str>",
"state": "<str>",
"cep": "<str>"
}
authorization=True
/api/v1/emails/
POST METHOD
{
"user": <user_RN_fk>,
"email": "<email>"
}
authorization=True
/api/v1/phones/
POST METHOD
{
"user": <user_RN_fk>,
"area_code": "<str>",
"prefix_number": "<str>",
"phone_number": "<str>"
}
authorization=True
/api/v1/accounts/
POST METHOD
{
"type": "<str>"
}
The value for "type" needs to be "Savings" or "Current"
GET METHOD
{
"user": [
654321
],
"agency": 1,
"number": 1112,
"type": "Current",
"balance": "275.25",
"credit_limit": "500.00",
"is_active": true
}
authorization=True
/api/v1/investments/
POST METHOD
{
"type": "<str>",
"contribution": <float>,
"admin_fee": <float>,
"period": "<yyyy-mm-dd>",
"risc_rate": <float>,
"profitability": <float>,
"is_active": <boolean>
}
GET METHOD
{
"id": 1,
"type": "LCA",
"contribution": "135.25",
"admin_fee": "1.50",
"period": "2030-12-11",
"risc_rate": "2.30",
"profitability": "15.60",
"is_active": true
}
authorization=True
/api/v1/account-investments/
POST METHOD
{
"id_account": <account_fk>,
"id_investment": <investment_fk>
}
GET METHOD
For GET Method need to pass the query parameter "?account=<account_number>"
{
"id_account": 1111,
"id_investment": 1
}
authorization=True
GET METHOD
GET all installments
For GET Method need to pass the query parameter "?account=<account_number>"
{
"id": 1,
"id_account": 1111,
"number": "1",
"expiration_date": "2023-10-18",
"payment_date": null,
"payment_amount": "419.53",
"paid": false
}
GET installment final amount
For GET Method need to pass the query parameter "?account=<account_number>&final=true"
{
"Installment final amount": 927.45
}
authorization=True
/api/v1/cards/
POST METHOD
{
"id_account": <account_fk>
}
GET METHOD
For GET Method need to pass the query parameter "?account=<account_number>"
{
"id_account": 1111,
"number": "570054397143",
"expiration_date": "2027-06-22",
"flag": "Mastercard",
"verification_code": "843",
"is_active": true
}
authorization=True
/api/v1/card-transactions/
POST METHOD
{
"id_account": <account_fk>,
"id_card": <card_fk>,
"amount": <float>
}
authorization=True
/api/v1/loans/
POST METHOD
{
"id_account": <account_fk>,
"amount_request": <float>,
"installment_amount": <int>,
"observation": "<str>"
}
GET METHOD
For GET Method need to pass the query parameter "?account=<account_number>"
{
"id_account": 1111,
"request_date": "2023-10-11",
"amount_request": "1459.25",
"interest_rate": "15.00",
"installment_amount": 4,
"observation": "personal use"
}
authorization=True
/api/v1/pix/
POST METHOD
{
"id_account": <account_fk>,
"id_receiver_account": <account_fk>,
"amount": <float>
}
authorization=True
/api/v1/statements/
GET METHOD
For GET Method need to pass the query parameter "?account=<account_number>"
{
"id_account": <int>,
"transaction_type": "<str>",
"amount": <float>,
"balance": <float>,
"created_at" <yyyy-mm-dd>
}