banks
Общее описание проекта
Проект представляет собой систему управления банковскими операциями на базе Django, предназначенную для автоматизации финансовых процессов в IT-компаниях. Система включает в себя интеграцию с различными банковскими API и предоставляет возможности для управления банковскими счетами пользователей, обработки платежных поручений и ведения учета транзакций.
Описание модулей проекта
- Модуль администрирования: Позволяет управлять учетными записями пользователей банка, включая назначение прав и доступов.
- Модуль обработки платежных поручений: Генерирует и отправляет платежные поручения в банки, используя данные пользователей и шаблоны XML.
- Модуль интеграции с банками: Содержит функционал для взаимодействия с API различных банков (APIBank, Modulbank, Tinkoff, Tochka) для получения информации о счетах и операциях.
- Модуль обработки данных: Отвечает за обработку и преобразование данных, полученных от банковских API, в удобный для использования формат.
Логика работы системы
Система работает на основе Django и взаимодействует с внешними банковскими API для выполнения финансовых операций. Администраторы системы могут создавать и управлять пользователями, каждый из которых связан с определенным банковским счетом и имеет свой API ключ. Пользов атели могут генерировать платежные поручения, которые затем автоматически формируются в XML формате и отправляются в соответствующий банк.
Интеграции с внешними системами
Система интегрирована с несколькими банковскими API, включая APIBank, Modulbank, Tinkoff и Tochka. Эти интеграции позволяют выполнять операции с банковскими счетами, отправлять платежные поручения и получать информацию о транзакциях. Кроме того, предусмотрена обработка ошибок и исключений, связанных с взаимодействием с внешними API.
Бизнес-логика проекта
На основе исходного кода проекта, в системе можно выполнить следующие действия:
-
Управление учетными записями пользователей банковских счетов (BankAccountUserAdmin):
- Просмотр списка учетных записей.
- Изменение учетных записей.
-
Работа с API банков:
- APIBank:
- Генерация и отправка платежных поручений (generate_prepared_request_for_payment_order).
- Получение URL для платежного поручения (get_url_to_payment_order).
- Modulbank:
- Просмотр списка транзакций (list_transactions_modulbank).
- Генерация запроса для платежного поручения (generate_prepared_request_for_payment_order_modulbank).
- Получение URL для платежного поручения (get_url_to_payment_order_modulbank).
- Tinkoff:
- Генерация и отправка платежных поручений (generate_prepared_request_for_payment_order_tinkoff).
- Получение URL для платежного поручения (get_url_to_payment_order_tinkoff).
- Tochka:
- Генерация и отправка платежных поручений (generate_prepared_request_for_payment_order_tochka).
- Получение URL для платежного поручения (get_url_to_payment_order_tochka).
- APIBank:
-
Вспомогательные функции:
- Преобразование даты (convert_date).
- Генерация XML для платежных поручений (generate_xml).
- Преобразование адреса (split_adress).
Эти функции отражают основные возможности системы по управлению банковскими операциями и взаимод ействию с API различных банков.
Пример использования на тестовых данных:
- Авторизация: Пользователь (например, Иван) входит в систему и выбирает банк (например, Modulbank).
- Создание Платежного Поручения: Иван создает платежное поручение, указывая сумму, получателя, и назначение платежа.
- Отправка Поручения: Поручение отправляется в Modulbank через API.
- Просмотр Истории Операций: Иван просматривает историю операций по своему счету.
- Обработка Ошибок: В случае ошибки при отправке поручения, система фиксирует и отображает соответствующее сообщение об ошибке.
Модель данных
Основной сущностью в проекте является BankAccountUser, описанная в banks\models.py. Эта модель представляет пользователя банковского счета в системе. Детально рассмотрим каждое поле этой модели:
-
user (ForeignKey на User):
- Связь с встроенной моделью пользователя Django (
User). Это обеспечивает привязку каждого банковского счета к конкретному пользователю системы. - Используется для аутентификации и управления доступом.
- Связь с встроенной моделью пользователя Django (
-
type (CharField):
- Хранит тип банковского счета, что предполагает различные варианты, такие как 'modulbank', 'tochka', 'tinkoff', 'apibank'.
- Это поле используется для определения, к какому API банка должны быть направлены запросы, связанные с этим счетом.
-
api_key (CharField):
- Содержит ключ API, который используется для взаимодействия с API соответствующего банка.
- Этот ключ обеспечивает безопасность и авторизацию при выполнении операций на банковском счете пользователя через внешние API.
В banks\admin.py определен класс BankAccountUserAdmin для административной панели Django. Этот класс определяет, какие поля модели BankAccountUser отображаются в административном инт ерфейсе и как они могут быть отредактированы. Например, для суперпользователей доступны все поля, в то время как для обычных пользователей доступ ограничен.
Эта модель данных является центральной для управления банковскими счетами пользователей и их взаимодействием с различными банковскими API. Она обеспечивает связку между учетными данными пользователей и их финансовыми операциями, а также регулирует доступ к функциональности в зависимости от типа пользователя и выбранного банка.
Диаграмма Состояний
Анализ кода проекта
-
Обработка исключений:
- В
apibank.py, функцииgenerate_prepared_request_for_payment_orderиget_url_to_payment_orderиспользуют простое исключениеHttpException. Рекомендуется использовать более специализированные исключения для точного описания возможных ошибок.
- В
-
Эффективность обработки данных:
- В
modulbank.py, функцияlist_transactions_modulbankделает запросы к API для каждого банковского счета в цикле. Можно улучшить производительность, минимизируя количество запросов, например, используя пакетную обработку, если API это поддерживает.
- В
-
Кэширование:
- Для повышения производительности и снижения нагрузки на внешние системы, можно рассмотреть введение кэширования результатов запросов к API банков.
-
Избыточные запросы данных:
- В
modulbank.py, функцияtransform_transactionможет быть оптимизирована путем избегания повторных запросов данных, которые уже были получены.
- В
-
Валидация входных данных:
- Проверка входных данных на корректность перед отправкой запросов к API может помочь предотвратить ошибки и непредвиденное поведение системы.
-
Оптимизация шаблонов:
- Использование шаблонов в
generate_xmlиgenerate_jsonфункциях эффективно, но можно рассмотреть использование более продвинутых методов шаблонизации, уменьшающих шансы на ошибки в синтаксисе XML/JSON.
- Использование шаблонов в