Files
finance_app/README.md

5.0 KiB
Raw Permalink Blame History

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

Сервисы:


Разработка без 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