REST API that allows to calculate mortgage details, such as payment schedule and principal/interest breakdown. Supports addition of extra payments - they will be dynamically incorporated into the payment schedule.
An annuity repayment scheme is used for calculations. The formula for calculating a monthly payment:
PAYMENT = LOAN AMOUNT * (INTEREST RATE / (1 + INTEREST RATE) - NUMBER OF MONTHS - 1)
The final payment may be less than the standard monthly payment, so the amount of the final payment is equal to the remaining balance after the previous payment was made.
You can run the app natively:
pip install poetry
poetry install
python manage.py migrate
python manage.py runserver
Or via docker-compose:
docker-compose run app python manage.py migrate
docker-compose up
- Create a user:
POST127.0.0.1:8000/auth/register/
{
"username": "admin",
"password": "adminadmin",
"password2": "adminadmin",
"email": "admin@example.com"
}
- Get a token:
POST127.0.0.1:8000/auth/token/
{
"username": "admin",
"password": "adminadmin"
}
- Create a mortgage:
POST127.0.0.1:8000/api/v1/mortgage/
headers: {Authorization: Bearer <your_token_value>}
{
"percent": "8.20",
"period": 25,
"first_payment_amount": 2500000,
"credit_amount": 11000000,
"issue_date": "2021-09-04"
}
- Calculate mortgage schedule:
POST127.0.0.1:8000/api/v1/mortgage/<mortgage_id>/calc-payment-schedule/
headers: {Authorization: Bearer <your_token_value>} - Add extra payment:
POST127.0.0.1:8000/api/v1/mortgage/<mortgage_id>/add-extra-payment/
headers: {Authorization: Bearer <your_token_value>}
{
"amount": 70000,
"date": "2021-10-04"
}
- Check calculated payments:
GET127.0.0.1:8000/api/v1/mortgage/<mortgage_id>/payment/?page_size=100&page=1
headers: {Authorization: Bearer <your_token_value>}
Use Swagger to see all endpoints description: 127.0.0.1:8000/swagger/
- All
mortgage/
endpoints are available only for registered users. - User can only see mortgages that were created by himself.
- You can't CRUD payments directly via API - use
calc-payment-schedule/
endpoint instead. - Be aware that reusing the
calc-payment-schedule/
endpoint will remove any extra payment that you've already added. - After updating a mortgage (PUT, PATCH), payment schedule will be recalculated automatically. Also, all extra payments for this mortgage will be removed.
- There are a few rules for adding mortgage (POST)
mortgage/
:- Mortgage's period should be between 1 and 30 years.
- There are a few rules for adding extra payments
add-extra-payment/
:- Extra payment's date should be bigger than first payment's date and lower than last payment's date.
- Extra payment's amount should be less than previous payment's debt rest.
- Access token expires in 1 hour, refresh token - in 24 hours (both are 24 hours for dev env). Use
token/refresh/
to refresh the token.
The app writes logs to a console and to a file named mortgage_api.log
in (if it's not prod
env) the app's base directory.
This file contains events in json representation which is easy to be parsed.
You can go to the settings.py
and remove file
handler in LOGGING
section if it feels redundant.
Besides default Django events all payment calculations are logged.
Make sure you did install requirements (poetry install
) and then just set up the git hook scripts via pre-commit
:
pre-commit install