Микросервис представляет собой ипотечный калькулятор. Предоставляет возможность рассчитать параметры кредитования пр заданным параметрам. Сохраняет расчеты в кэше.
Сервис доступен по адресу http://rwfshr.ru:8080. Для удобного тестирования кэша в эндпоинт /execute добавлена искусственная задержка в 500мс. конфигурационные значения:
env: "prod"
port: 8080
cache:
ttl: 10
clear: 10go v1.21+
golangci-lint
Конфигурационный файл находится по пути ./src/config/config.yml и имеет вид:
env: "prod" // окружение в котором запущено приложение ("local", "dev", "prod").
port: 8080 // порт, на котором работает http-сервер.
cache: // параметры кэша.
ttl: 3600 // время жизни закэшированной записи в секундах.
clear: 3600 // интервах автоматического удаления записей кэша с истекшим сроком хранения в секундах. Путь до конфигурационного файла должен указываться при запуске во флаге --config или находиться в переменной окружения CONFIG_PATH. Флаг имеет больший приоритет.
В проекте существует Makefile со следующими командами:
- lint - осуществление проверки линтером.
- test - запуск тестов и вывод тестового покрытия.
- build - сборка Docker образа и вывод его размера.
- run - запуск контейнера.
- stoprm - остановка и удаление контейнера.
Для запуска приложения достаточно:
$ make build
$ make run
POST
/execute
Рассчитывает параметры кредитования по заданным параметрам и сохраняет результат расчетов в кэше.
Название Обязателен Тип данных Описание object_cost да int Общая стоимость объекта. initial_payment да int Первый взнос. months да int Количество месяцев. program да Program Программа кредитования.
Название Тип данных Описание base bool Программа базовой ипотеки. salary bool Программа для корпоративных клиентов. program bool Программа ипотеки для военных.
http code content-type Ответ Описание 400application/json; charset=utf-8{"error": "choose program"}Необходимо выбрать программу кредитования. 400application/json; charset=utf-8{"error": "choose only 1 program"}Необходимо выбрать только одну программу кредитования. 400application/json; charset=utf-8{"error": "the initial payment should be more"}Первоначальный взнос должен составлять как минимум 20% от суммы объекта.
{
"result": {
"params": { // запрашиваемые параметры кредита
"object_cost": 5000000,
"initial_payment": 1000000,
"months": 240
},
"program": { // программа кредита
"salary": true
},
"aggregates": { // блок с агрегатами
"rate": 8, // годовая процентная ставка
"loan_sum": 4000000, // сумма кредита
"monthly_payment": 33458, // аннуитетный ежемесячный платеж
"overpayment": 4029920, // переплата за весь срок кредита
"last_payment_date": "2044-02-18" // последняя дата платежа
}
}
}
GET
/cache
Выводит все результаты расчетов, сохраненные в кэше.
http code content-type Ответ Описание 400application/json; charset=utf-8{"error": "empty cache"}Кэе пуст.
[
{
"id": 0, // id расчета в кэше
"params": {
"object_cost": 5000000,
"initial_payment": 1000000,
"months": 240
},
"program": {
"salary": true
},
"aggregates": {
"rate": 8,
"loan_sum": 4000000,
"monthly_payment": 33458,
"overpayment": 4029920,
"last_payment_date": "2044-02-18"
}
},
{
"id": 1,
"params": {
"object_cost": 8000000,
"initial_payment": 2000000,
"months": 200
},
"program": {
"military": true
},
"aggregates": {
"rate": 9,
"loan_sum": 6000000,
"monthly_payment": 58019,
"overpayment": 5603800,
"last_payment_date": "2040-10-18"
}
},
{
"id": 2,
"params": {
"object_cost": 12000000,
"initial_payment": 3000000,
"months": 120
},
"program": {
"base": true
},
"aggregates": {
"rate": 10,
"loan_sum": 9000000,
"monthly_payment": 118936,
"overpayment": 5272320,
"last_payment_date": "2034-02-18"
}
}
]