Skip to content

sg41/FinApp

Repository files navigation

FinApp - Агрегатор банковских счетов

FinApp — это полнофункциональное full-stack приложение, предназначенное для агрегации финансовой информации с различных банковских счетов. Оно состоит из бэкенда на FastAPI, который взаимодействует с симуляцией Open Banking API, и кроссплатформенного фронтенда на Flutter.

🚀 Основные возможности

  • Аутентификация и сессии: Регистрация и вход пользователей с использованием JWT-токенов и персистентным хранением сессии на клиенте.
  • Управление пользователями: Администраторы могут управлять пользователями через API.
  • Динамическая панель счетов:
    • Отображение всех счетов, сгруппированных по банкам.
    • Автоматический подсчет и отображение общего баланса по всем счетам в режиме реального времени.
    • Просмотр детальной информации по каждому счету: владелец, тип, статус и баланс.
  • Проактивная синхронизация данных: При запуске и ручном обновлении приложение автоматически запрашивает свежие данные по всем активным подключениям.
  • Управление подключениями: Интуитивно понятный интерфейс для добавления новых банков из динамического списка и удаления существующих подключений.
  • Аналитика: Расчет и отображение оборотов (приход/расход) по счетам за выбранный период.
  • Кроссплатформенность: Фронтенд на Flutter, готовый к сборке под Web, Desktop и мобильные платформы.

🏛️ Архитектура

Приложение имеет классическую клиент-серверную архитектуру:

┌──────────┐   ┌────────────────┐   ┌──────────────┐
│ Flutter  │   │                │   │              │
│ Frontend │<─>│ FastAPI Backend├<─>│  PostgreSQL  │
│          │   │      (API)     │   │   Database   │
└──────────┘   │                │   │              │
               └───────┬────────┘   └──────────────┘
                       │
                       │
                       ▼
               ┌────────────────┐
               │                │
               │ Mock Open      │
               │ Banking API    │
               │ (vbank, abank) │
               └────────────────┘
  • Frontend: Написан на Flutter с использованием Provider для управления состоянием. Отвечает за весь UI, взаимодействие с пользователем и формирование запросов к API.
  • Backend: Написан на FastAPI. Обрабатывает бизнес-логику, управляет данными, взаимодействует с базой данных и внешними банковскими API.
  • Database: PostgreSQL хранит информацию о пользователях, подключениях и кэшированные данные счетов.

🛠️ Технологический стек

  • Бэкенд: Python, FastAPI, SQLAlchemy, Uvicorn
  • Фронтенд: Dart, Flutter
  • База данных: PostgreSQL
  • Тестирование: Postman, Newman
  • Контейнеризация: Docker, Docker Compose

🏁 Начало работы

Предварительные требования

Установка и запуск бэкенда

  1. Клонируйте репозиторий:

    git clone <repository_url>
    cd finance-app-master
  2. Настройте переменные окружения: Создайте файл .env в корневой директории проекта, скопировав содержимое из .env.example (если он есть) или создав его с нуля:

    # URL для подключения к базе данных. 'user:password' и 'finance_db' соответствуют compose.yml
    DATABASE_URL="postgresql://user:password@localhost:5432/finance_db"
    
    # Секретный ключ для генерации JWT токенов. Сгенерируйте надежный ключ.
    # openssl rand -hex 32
    SECRET_KEY="ваш_супер_секретный_ключ"
    
    # Данные для доступа к Mock Banking API
    CLIENT_ID="ваш_уникальный_id_клиента"
    CLIENT_SECRET="ваш_уникальный_секрет_клиента"
  3. Запустите базу данных: Используйте Docker Compose для запуска контейнера с PostgreSQL.

    docker-compose up -d
  4. Установите зависимости Python: Рекомендуется использовать виртуальное окружение.

    python -m venv .venv
    source .venv/bin/activate  # Для Windows: .venv\Scripts\activate
    pip install -r requirements.txt
  5. Инициализируйте базу данных: Этот скрипт создаст все необходимые таблицы и добавит тестового пользователя и администратора.

    make database
    # или напрямую:
    # cd backend && python create_test_user.py
    • Тестовый пользователь: testuser@example.com / password
    • Администратор: admin@example.com / adminpass
  6. Запустите сервер:

    make run
    # или напрямую:
    # cd backend && uvicorn main:app --reload --host 0.0.0.0 --port 8011

    Сервер будет доступен по адресу http://localhost:8011. Документация API (Swagger UI) будет доступна по http://localhost:8011/docs.

Запуск фронтенда

  1. Перейдите в директорию фронтенда:
    cd frontend
  2. Установите зависимости:
    flutter pub get
  3. Запустите приложение: Выберите нужную платформу (web, desktop, mobile).
    flutter run -d chrome # для Web
    flutter run -d macos   # для macOS
    flutter run -d windows # для Windows

🧪 Тестирование API

Для запуска интеграционных тестов API используется Newman (консольный runner для Postman).

  1. Убедитесь, что запущен бэкенд-сервер.
  2. Выполните команду:
    make test
    Эта команда запустит Docker-контейнер с Newman, который выполнит все тесты из коллекции test/postman_collection.json с использованием окружения test/postman_environment.json.

🗂️ Структура проекта

finance-app-master/
├── backend/            # Исходный код бэкенда на FastAPI
│   ├── static/         # Статические файлы (иконки банков)
│   ├── auth.py         # Логика аутентификации
│   ├── models.py       # Модели данных SQLAlchemy
│   ├── schemas.py      # Схемы данных Pydantic
│   ├── user_api.py     # API для управления пользователями
│   ├── banks_api.py    # API для работы с банками
│   ├── ..._api.py      # Другие модули API
│   ├── main.py         # Главный файл приложения FastAPI
│   └── create_test_user.py # Скрипт инициализации БД
├── frontend/           # Исходный код фронтенда на Flutter
│   ├── lib/            # Основной код приложения
│   ├── android/        # Код для Android
│   ├── ios/            # Код для iOS
│   ├── ...             # Код для других платформ
│   └── pubspec.yaml    # Файл зависимостей Flutter
├── test/               # Файлы для тестирования API
│   ├── postman_collection.json
│   └── postman_environment.json
├── compose.yml         # Файл Docker Compose для БД
├── Makefile            # Утилиты для сборки, запуска и тестов
├── requirements.txt    # Зависимости Python
└── README.md           # Этот файл

🔧 Дополнительные скрипты

  • backend/create_test_user.py: Полностью очищает и заново инициализирует базу данных. Используйте с осторожностью.
  • backend/manage_users.py: CLI для управления ролями пользователей.
    # Сделать пользователя админом
    python backend/manage_users.py promote user@example.com
    
    # Снять права админа
    python backend/manage_users.py demote user@example.com
    
    # Показать список всех админов
    python backend/manage_users.py list

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published