Перейти к основному содержимому

banks

Общее описание проекта

Проект представляет собой систему управления банковскими операциями на базе Django, предназначенную для автоматизации финансовых процессов в IT-компаниях. Система включает в себя интеграцию с различными банковскими API и предоставляет возможности для управления банковскими счетами пользователей, обработки платежных поручений и ведения учета транзакций.

Описание модулей проекта

  1. Модуль администрирования: Позволяет управлять учетными записями пользователей банка, включая назначение прав и доступов.
  2. Модуль обработки платежных поручений: Генерирует и отправляет платежные поручения в банки, используя данные пользователей и шаблоны XML.
  3. Модуль интеграции с банками: Содержит функционал для взаимодействия с API различных банков (APIBank, Modulbank, Tinkoff, Tochka) для получения информации о счетах и операциях.
  4. Модуль обработки данных: Отвечает за обработку и преобразование данных, полученных от банковских API, в удобный для использования формат.

Логика работы системы

Система работает на основе Django и взаимодействует с внешними банковскими API для выполнения финансовых операций. Администраторы системы могут создавать и управлять пользователями, каждый из которых связан с определенным банковским счетом и имеет свой API ключ. Пользователи могут генерировать платежные поручения, которые затем автоматически формируются в XML формате и отправляются в соответствующий банк.

Интеграции с внешними системами

Система интегрирована с несколькими банковскими API, включая APIBank, Modulbank, Tinkoff и Tochka. Эти интеграции позволяют выполнять операции с банковскими счетами, отправлять платежные поручения и получать информацию о транзакциях. Кроме того, предусмотрена обработка ошибок и исключений, связанных с взаимодействием с внешними API.

Бизнес-логика проекта

На основе исходного кода проекта, в системе можно выполнить следующие действия:

  1. Управление учетными записями пользователей банковских счетов (BankAccountUserAdmin):

    • Просмотр списка учетных записей.
    • Изменение учетных записей.
  2. Работа с 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).
  3. Вспомогательные функции:

    • Преобразование даты (convert_date).
    • Генерация XML для платежных поручений (generate_xml).
    • Преобразование адреса (split_adress).

Эти функции отражают основные возможности системы по управлению банковскими операциями и взаимодействию с API различных банков.

Пример использования на тестовых данных:

  1. Авторизация: Пользователь (например, Иван) входит в систему и выбирает банк (например, Modulbank).
  2. Создание Платежного Поручения: Иван создает платежное поручение, указывая сумму, получателя, и назначение платежа.
  3. Отправка Поручения: Поручение отправляется в Modulbank через API.
  4. Просмотр Истории Операций: Иван просматривает историю операций по своему счету.
  5. Обработка Ошибок: В случае ошибки при отправке поручения, система фиксирует и отображает соответствующее сообщение об ошибке.

Модель данных

Основной сущностью в проекте является BankAccountUser, описанная в banks\models.py. Эта модель представляет пользователя банковского счета в системе. Детально рассмотрим каждое поле этой модели:

  1. user (ForeignKey на User):

    • Связь с встроенной моделью пользователя Django (User). Это обеспечивает привязку каждого банковского счета к конкретному пользователю системы.
    • Используется для аутентификации и управления доступом.
  2. type (CharField):

    • Хранит тип банковского счета, что предполагает различные варианты, такие как 'modulbank', 'tochka', 'tinkoff', 'apibank'.
    • Это поле используется для определения, к какому API банка должны быть направлены запросы, связанные с этим счетом.
  3. api_key (CharField):

    • Содержит ключ API, который используется для взаимодействия с API соответствующего банка.
    • Этот ключ обеспечивает безопасность и авторизацию при выполнении операций на банковском счете пользователя через внешние API.

В banks\admin.py определен класс BankAccountUserAdmin для административной панели Django. Этот класс определяет, какие поля модели BankAccountUser отображаются в административном интерфейсе и как они могут быть отредактированы. Например, для суперпользователей доступны все поля, в то время как для обычных пользователей доступ ограничен.

Эта модель данных является центральной для управления банковскими счетами пользователей и их взаимодействием с различными банковскими API. Она обеспечивает связку между учетными данными пользователей и их финансовыми операциями, а также регулирует доступ к функциональности в зависимости от типа пользователя и выбранного банка.

Диаграмма Состояний

Анализ кода проекта

  1. Обработка исключений:

    • В apibank.py, функции generate_prepared_request_for_payment_order и get_url_to_payment_order используют простое исключение HttpException. Рекомендуется использовать более специализированные исключения для точного описания возможных ошибок.
  2. Эффективность обработки данных:

    • В modulbank.py, функция list_transactions_modulbank делает запросы к API для каждого банковского счета в цикле. Можно улучшить производительность, минимизируя количество запросов, например, используя пакетную обработку, если API это поддерживает.
  3. Кэширование:

    • Для повышения производительности и снижения нагрузки на внешние системы, можно рассмотреть введение кэширования результатов запросов к API банков.
  4. Избыточные запросы данных:

    • В modulbank.py, функция transform_transaction может быть оптимизирована путем избегания повторных запросов данных, которые уже были получены.
  5. Валидация входных данных:

    • Проверка входных данных на корректность перед отправкой запросов к API может помочь предотвратить ошибки и непредвиденное поведение системы.
  6. Оптимизация шаблонов:

    • Использование шаблонов в generate_xml и generate_json функциях эффективно, но можно рассмотреть использование более продвинутых методов шаблонизации, уменьшающих шансы на ошибки в синтаксисе XML/JSON.