Задание: Нужно сделать api для создания кредитных заявок.
Стэк технологий - бэк(django + rest_framework) сделать API, для создания заявок. Сделать админ панель (django admin) для всех моделей.
Модели: 1. программма - мин. и макс. сумма кредита, мин. и макс. возраст заемщика 2. заемщик - иин, дата рождения 3. заявки - программа, заемщик, сумма, статус (одобрено, отказ), причина отказа 4. черный список - иин
Запрос на создание заявки: парсим иин, первые 6 цифр - это дата рождения в формате ггммдд. При создании заявки, нужно запустить цепочку из проверок. Проверки должны состоять из отдельных классов, при "отказе" должны вернуть описание отказа. Если заявка прошла все проверки указываем статус "одобрено".
Программа и черный список редактируются через админ панель.
Проверки:
-
Проверка по сумме кредита если не походит по сумме, тогда отказ "Заявка не подходит по сумме" если не возрасту, тогда отказ "Заемщик не подходит по возрасту"
-
Если иин есть в списке Индивидуальных предпринимателей (ИП), тогда отказ "иин является ИП" ссылка на запрос https://stat.gov.kz/api/juridical/gov/?bin={иин}&lang=ru
-
Проверка по черному списку если найден в черном списке, тогда отказ "Заемщик в черном списке"
Задача выполнена на стеке django/postgres/celery/redis. Сервисы упакованы в docker и объеденены с помощью docker-compose. При поступлении, заявка сохраняется и отправляется в очередь celery для проверки на соответствие условиям. Клиенту api возвращаются данные по заявке, по которым можно проверять статус. Демо проекта можно посмотреть по адресу creditor.karpets.pro логин/пароль - demo/demo
git clone https://github.com/Pavel1114/creditor.git
cp env.example .env
редактируем переменные окружения, необходимые для запуска, в .env
docker-compose -f dev.yml up
запуск тестов
docker-compose -f dev.yml python manage.py test
- проект не подготовлен к деплою. Демо работает на django dev server, перед которым стоит проксирующий nginx
- для аутентификации используются сессии. Для рабочего проекта скорее всего нужно будет настраивать токены
- нет обработки ошибок при работы со внешними сервисами (проверка ИИН)
- проверка заявки прерывается при нахождении первого несоответствия. И храниться только 1 причина. Возможно на рабочем проекте стоило бы в любом случае проверять все критерии и хранить все ошибки по аналогии с django forms.
- тест написан только 1 - для примера
- + ещё много чего не учтено