Добро пожаловать в монорепозиторий проекта, реализуемого в рамках проектного практикума от Т-Банка.
Система реализована на микросервисной архитектуре с использованием Python (FastAPI) и C# (.NET 8), а также фронтенда в стилистике Т-Банка без логотипа на React.
Каждый сервис отвечает за отдельную бизнес-область и может разворачиваться независимо.
| Сервис | Язык | Назначение |
|---|---|---|
| Frontend | TypeScript (React) | Веб-интерфейс пользователя |
| Authentification | Python (FastAPI) | Аутентификация, JWT, JWKS, refresh токены |
| Transactions | C# (ASP.NET Core) | Управление транзакциями |
| Classification | Python (FastAPI) | Классификация транзакций |
| Budget | C# (ASP.NET Core) | Управление бюджетом и лимитами |
| Goals | Python (FastAPI) | Финансовые цели и прогресс |
| Logs | C# (ASP.NET Core) | Централизованный сбор логов |
| Notification | Python (FastAPI, Celery) | Отправка email, push и SMS уведомлений |
| Shared | Python + .NET | Общие библиотеки, модели и утилиты |
| Infra | Docker + K8s | Инфраструктура, CI/CD, мониторинг |
.
├── services/
│ ├── authentification/
│ ├── transactions/
│ ├── classification/
│ ├── budget/
│ ├── goals/
│ ├── logs/
│ └── notification/
│
├── frontend/
│ ├── public/
│ ├── src/
│ │ ├── app/
│ │ ├── features/
│ │ │ ├── budget/ # Экран бюджета
│ │ │ ├── dashboard/ # Главный экран
│ │ │ ├── goals/ # Экран целей
│ │ │ ├── settings/ # Экран настроек
│ │ │ └── transactions/ # Экран транзакций
│ │ └── shared/ # Общие экраны и компоненты
│ └── package.json
│
├── shared/ # Общие библиотеки (Python / .NET)
│ ├── python/
│ └── dotnet/
│
├── infra/ # Инфраструктура, Docker, CI/CD, мониторинг
│ ├── docker/
│ ├── k8s/
│ ├── ci-cd/
│ └── compose/
│
├── docker-compose.yml # Основной compose для dev-окружения
├── .env.example # Пример переменных окружения
└── README.md # Этот файл
git clone https://github.com/asedletskii/SmartBudget.git cd SmartBudget
cp .env.example .env
docker compose -f infra/compose/docker-compose.yml up -d
docker compose up --build
Для запуска фронтенда потребуется Yarn версии 1.x.x (проверялась только 1.22.22) (инструкция по установке)
Проверить версию Yarn можно командой:
yarn --version
-
Выполните команду для перехода в папку frontend
cd frontend -
Выполните команду для установки зависимостей проекта:
yarn install -
Выполните команду для запуска проекта:
yarn start
Фронтенд будет доступен по адресу: http://localhost:3000
После сборки сервисы будут доступны по адресам:
| Сервис | URL |
|---|---|
| ✅ Authentification | http://localhost:8000/api/v1/docs |
| ✅ Classification | http://localhost:8001/api/v1/docs |
| ✅ Goals | http://localhost:8002/api/v1/docs |
| 🟡 Notification | http://localhost:8003/api/v1/docs |
| ❌ Budget | http://localhost:8004/swagger |
| ❌ Transactions | http://localhost:8005/swagger |
| ❌ Logs | http://localhost:8006/swagger |
| ✅ Frontend | http://localhost:3000 |
Веб-интерфейс реализован на React + TypeScript в стилистике Т-Банка без использования логотипов.
- ✅ Авторизация: вход пользователя, работа с JWT-токеном
- ✅ Главный экран: отображение статистики:
- топ 5 целей по проценту выполнения
- сумма доходов/расходов за последний месяц
- процент расхода бюджета
- ✅ Транзакции:
- ✅ список транзакций
- ✅ фильтрация
- ✅ поиск
- ✅ просмотр деталей
- ✅ ручная перекатегоризация
- ✅ Бюджет (в процессе доработки):
- дашборд (факт VS план)
- просмотр лимитов по категориям
- ✅ Цели:
- создание
- редактирование
- фильтрация целей
- отслеживание прогресса конкретной цели
- установка меток(тэгов)
- ✅ Настройки:
- ✅ управление активными сессиями
- ✅ установка срока жизни refresh-токена
- ✅ смена пароля
- ✅ настройка уведомлений
- ✅ настройка категорий бюджета
- ✅ Уведомления: отображение алертов и событий в центре уведомлений
⚠️ Некоторые экраны/сценарии могут работать в демонстрационном режиме (используя файлы frontend/src/features/*/api/*.mock.ts).
Фронтенд построен по feature-based структуре:
frontend/src/features/— экраны и бизнес-логика по доменам (budget, dashboard, goals, settings, transactions)frontend/src/shared/— переиспользуемые компоненты, экраны авторизации, store, утилиты и слой APIfrontend/src/app/— глобальные провайдеры
Фронтенд взаимодействует с микросервисами через REST API:
/api/v1/authentification— регистрация, логин, обновление токена/api/v1/goals— создание, редактирование, получение и фильтрация целей/api/v1/transactions— получение и перекатегоризация транзакций/api/v1/notifications— получение списка уведомлений/api/v1/push— пуш-уведомления/api/v1/budget— создание, получение информации о бюджете и лимитах/api/v1/dashboard— агрегированная статистика (реализуется через API Gateway)/api/v1/settings— управление настройками пользователя (сессии, пароль, параметры безопасности)
- FastAPI
- SQLAlchemy
- Pydantic
- ARQ
- Redis
- PostgreSQL
- .NET 8 / ASP.NET Core
- Entity Framework Core
- PostgreSQL
- React
- TypeScript
- Material UI
- Redux toolkit
- React Router
- ✅ Docker / Docker Compose
- ❌ Kubernetes - (в планах)
- ✅ Nginx (reverse proxy)
- ❌ Prometheus + Grafana для мониторинга - (в планах)
- ✅ Kafka (очереди сообщений)
- 🟡 GitHub Actions (CI/CD) - (в процессе)
| Папка | Назначение |
|---|---|
| shared/ | Общие библиотеки и модели (Python и .NET) |
| infra/ | Docker, Kubernetes, CI/CD, мониторинг |
| frontend/ | Веб-интерфейс приложения |
| services/ | Все микросервисы системы |
- Каждый микросервис полностью автономен.
- Общение между сервисами — через брокер сообщений Kafka.
- Общение между сервисами и фронтендом — через REST API.
- Все токены подписываются централизованно через JWKS из Auth.
- Логи собираются централизованно через Logs Service.
- Общие компоненты вынесены в
shared/ - В продакшн — деплой через CI/CD и Kubernetes.
| Участник | Роль | Ответственность |
|---|---|---|
| Артем Горшков | Backend developer (C#) | Transactions, Budget, Logs |
| Дмитрий Костерин (Телеграм) | Backend developer (Python) | Classification, Goals, Notification, Authentification |
| Антон Седлецкий (Телеграм) | Frontend developer | UI, интеграция API |
| Софья Евланова | Analityc | Анализ эффиктивности и работоспособности приложения |
Если у вас есть предложения или баг-репорты — создайте Issue в GitHub
или свяжитесь с командой разработки.