Полноценное fullstack-приложение (React + Go + PostgreSQL) для портфолио с вымышленной продуктовой доменной моделью и приближенной к production архитектурой.
- Вход по email/паролю (
POST /auth/login) - JWT-токен для доступа к защищенным API
- Получение данных текущего пользователя (
GET /auth/me) - Хранение сессии на frontend (token + user в localStorage)
- Выход из аккаунта с очисткой локальной сессии
- Поддержка ролей:
admin,manager,analyst,developer - Role-aware сводка “My Day” (например, счетчики задач учитывают роль владельца)
- Демо-аккаунты для быстрого входа
- KPI-блок с ключевыми показателями:
- задачи в работе
- просроченные задачи
- открытые тикеты
- непрочитанные алерты
- Обновление данных с backend после действий пользователя
- Таблица “План vs Факт” по продуктам и метрикам (
GET /metrics/plan-fact) - Просмотр снимков метрик (
GET /metrics) - Каталог метрик (
GET /metrics/catalog) с редактированием:- название
- описание
- формула
- единица измерения
- Сохранение изменений каталога (
PATCH /metrics/:code/catalog)
- Импорт JSON-пакета метрик (
POST /metrics/import) - Валидация входных строк импорта
- Upsert логика (повторная загрузка обновляет значение за ту же дату)
- Логирование статусов импорта (
running/success/failed) - Просмотр истории импортов (
GET /imports)
- Получение списка алертов (
GET /alerts) - Пометка алерта как прочитанного (
PATCH /alerts/:id/read) - Отображение приоритета/серьезности алертов
- Просмотр регламентных задач (
GET /process-tasks) - Смена статуса задачи (
todo,in_progress,done) - Обновление статуса через API (
PATCH /process-tasks/:id/status)
- Просмотр списка тикетов (
GET /tickets) - Создание тикета с приоритетом (
POST /tickets) - Канбан-представление по статусам:
openin_progressdone
- Смена статуса тикета (
PATCH /tickets/:id/status) - Комментарии к тикетам:
- список (
GET /tickets/:id/comments) - добавление (
POST /tickets/:id/comments)
- список (
- Экспорт CSV-отчета по метрикам (
GET /reports/metrics.csv) - Скачивание файла напрямую из UI
- Мультиязычный интерфейс:
RU / EN / 中文 - Переключение темы:
light / dark - Реактивное обновление блоков после CRUD-операций
- Автоматическое создание схемы БД при запуске API
- Автоматический seed тестовых данных:
- пользователи
- продукты
- метрики
- значения и target-данные
- задачи
- тикеты и алерты
- Frontend: React 18, Vite, TypeScript, Zustand
- Backend: Go 1.23, Gin, pgx, JWT
- База данных: PostgreSQL 16
- Инфраструктура: Docker Compose
src/app— инициализация приложения и провайдерыsrc/pages— страницы-оркестраторы (композиция виджетов)src/widgets— крупные UI-блоки страницыsrc/entities— доменные сущности и их моделиsrc/shared— переиспользуемая инфраструктура (api,i18n,lib,config)
cmd/server— точка входа и wiring зависимостейinternal/domain— доменные модели и ошибкиinternal/application— use-case сервисы (бизнес-правила)internal/infrastructure— адаптеры инфраструктуры (PostgreSQL, JWT)internal/interfaces/http— delivery-слой (роутинг, middleware, handlers)internal/db— bootstrap/migrations/seed базы данных
- Скопировать env:
cp .env.example .env
- Запустить сервисы:
docker compose up --build
- Открыть приложение:
http://localhost:4173
- Проверить API:
http://localhost:8080/health
admin@finops.local / admin123manager@finops.local / manager123analyst@finops.local / analyst123
cd api
go mod tidy
go run ./cmd/servercd web
npm install
npm run devPOST /auth/loginGET /dashboard/my-dayGET /metricsPOST /metrics/importGET /metrics/catalogPATCH /metrics/:code/catalogGET /metrics/plan-factGET /importsGET /alertsPATCH /alerts/:id/readGET /process-tasksPATCH /process-tasks/:id/statusGET /ticketsPOST /ticketsPATCH /tickets/:id/statusGET /tickets/:id/commentsPOST /tickets/:id/commentsGET /reports/metrics.csv
- Схема БД и сидирование выполняются автоматически при запуске API.