149 lines
5.0 KiB
Markdown
149 lines
5.0 KiB
Markdown
# 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`
|