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
- Git
- Python 3.9+ и
pip - Docker и Docker Compose
- (Опционально) Flutter SDK для разработки фронтенда
-
Клонируйте репозиторий:
git clone <repository_url> cd finance-app-master
-
Настройте переменные окружения: Создайте файл
.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="ваш_уникальный_секрет_клиента"
-
Запустите базу данных: Используйте Docker Compose для запуска контейнера с PostgreSQL.
docker-compose up -d
-
Установите зависимости Python: Рекомендуется использовать виртуальное окружение.
python -m venv .venv source .venv/bin/activate # Для Windows: .venv\Scripts\activate pip install -r requirements.txt
-
Инициализируйте базу данных: Этот скрипт создаст все необходимые таблицы и добавит тестового пользователя и администратора.
make database # или напрямую: # cd backend && python create_test_user.py
- Тестовый пользователь:
testuser@example.com/password - Администратор:
admin@example.com/adminpass
- Тестовый пользователь:
-
Запустите сервер:
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.
- Перейдите в директорию фронтенда:
cd frontend - Установите зависимости:
flutter pub get
- Запустите приложение:
Выберите нужную платформу (web, desktop, mobile).
flutter run -d chrome # для Web flutter run -d macos # для macOS flutter run -d windows # для Windows
Для запуска интеграционных тестов API используется Newman (консольный runner для Postman).
- Убедитесь, что запущен бэкенд-сервер.
- Выполните команду:
Эта команда запустит Docker-контейнер с Newman, который выполнит все тесты из коллекции
make testtest/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