5.0 KiB
5.0 KiB
Finance App — Система финансового учёта
Приложение для управления личными финансами по принципу 1С:Деньги. Работает через веб-браузер и Android (React Native + Expo).
Технологический стек
| Компонент | Технология |
|---|---|
| База данных | PostgreSQL 16 |
| Backend API | FastAPI + SQLAlchemy 2.0 + Alembic |
| Веб-фронтенд | React 18 + Vite + Recharts |
| Android | React Native + Expo |
| Аутентификация | JWT (access + refresh) + bcrypt |
| Реверс-прокси | Nginx (HTTPS + rate-limiting) |
| Развёртывание | Docker + docker-compose |
Структура проекта
finance_app/
├── backend/ FastAPI-сервер
│ ├── app/
│ │ ├── models/ SQLAlchemy-модели (13 таблиц)
│ │ ├── schemas/ Pydantic-схемы
│ │ ├── auth/ JWT, RBAC
│ │ └── api/v1/ REST-роуты
│ ├── alembic/ Миграции БД
│ ├── seed.py Начальные данные
│ └── Dockerfile
├── frontend/ React-приложение
│ └── src/
│ ├── pages/ Dashboard, Accounts, Operations, Budgets,
│ │ ExchangeRates, Locations, Calendar, Admin
│ └── api/ HTTP-клиент (axios)
├── android/ React Native (Expo)
│ └── src/
│ ├── screens/ 5 экранов
│ └── navigation/ Bottom tabs
├── nginx/ nginx.conf с HTTPS
├── docs/
│ └── ER_diagram.md Mermaid ER-диаграмма
└── docker-compose.yml
Быстрый старт (Docker)
1. Скопировать конфиг
cp backend/.env.example backend/.env
# Заполнить POSTGRES_PASSWORD, SECRET_KEY, ALLOWED_ORIGINS
2. Сгенерировать SSL-сертификат (dev)
mkdir -p nginx/certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout nginx/certs/server.key \
-out nginx/certs/server.crt \
-subj "/CN=localhost"
3. Запустить
docker-compose up --build
Сервисы:
- Веб-приложение: https://localhost
- API: https://localhost/api/v1
- Swagger Docs (только DEBUG=true): http://localhost:8000/docs
Разработка без Docker
Backend
cd backend
python -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env # настроить DATABASE_URL
alembic upgrade head
python seed.py
uvicorn app.main:app --reload
Frontend
cd frontend
npm install
npm run dev # http://localhost:5173
Android
cd android
npm install
npx expo start # открыть Expo Go на телефоне или запустить эмулятор
В
android/src/api/client.tsпоменяйтеBASE_URLна адрес вашего сервера.
Учётные данные по умолчанию
| Роль | Логин | Пароль (из ADMIN_PASSWORD или по умолчанию) |
|---|---|---|
| admin | admin |
Admin1234! |
⚠️ Смените пароль после первого входа!
Функциональность
- Валюты — справочник (RUB, USD, EUR, GBP, CNY, BTC)
- Курсы валют — ввод вручную по датам, конвертация при операциях
- Счета — наличные, банк, кредитка, вклад, инвест., крипто. Хранение баланса
- Категории — двухуровневая иерархия (системные + пользовательские)
- Бюджеты — лимиты по категориям (месяц/неделя/год), прогресс-бар, перерасход
- Местоположения — магазины, банки, банкоматы с иерархией
- Операции — доходы, расходы, переводы между счетами (автобаланс)
- Связи операций — transfer, split, correction
- Календарь событий — разовые и повторяющиеся события с напоминанием
- Дашборд — KPI, Area-chart (30 дней), Pie по категориям, статус бюджетов
- Управление пользователями (admin) — роли, блокировка, управление валютами
ER-диаграмма
Смотрите docs/ER_diagram.md — диаграмма в формате Mermaid.
API-документация
При DEBUG=true доступны:
- Swagger UI:
/docs - ReDoc:
/redoc