# 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. Скопировать конфиг ```bash cp backend/.env.example backend/.env # Заполнить POSTGRES_PASSWORD, SECRET_KEY, ALLOWED_ORIGINS ``` ### 2. Сгенерировать SSL-сертификат (dev) ```bash 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. Запустить ```bash docker-compose up --build ``` Сервисы: - **Веб-приложение**: https://localhost - **API**: https://localhost/api/v1 - **Swagger Docs** (только DEBUG=true): http://localhost:8000/docs --- ## Разработка без Docker ### Backend ```bash 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 ```bash cd frontend npm install npm run dev # http://localhost:5173 ``` ### Android ```bash 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](docs/ER_diagram.md) — диаграмма в формате Mermaid. --- ## API-документация При `DEBUG=true` доступны: - Swagger UI: `/docs` - ReDoc: `/redoc`