BR 2.6: Интеграция AI Photo Studio Service — «AI Студия»
Зависит от:
- BR 1.4.3 — Permissions-роли
- BR 1.4.4 — Единая ролевая модель
- Auth Service — должен быть поднят и возвращать permissions через
/internal/auth/validate
Контекст
Внешний сервис AI Photo Studio (gensvc) уже существует как работающий прототип (Go + chi, PostgreSQL, MinIO, Polza.ai). Сервис генерирует и улучшает фотографии блюд с помощью AI (Polza Nano Banana 2).
Задача — интегрировать сервис в ERP-платформу франшизы: подключить к единой системе аутентификации (Auth Service), добавить нужные permissions в каталог User Service, обеспечить доступ нужным сотрудникам через Админку Франшизы.
Что хочет бизнес
Владельцы точек и контент-менеджеры хотят получать студийного качества фото блюд без фотографа — загружают обычное фото, выбирают стиль (пресет), AI делает красивую картинку для меню, рекламы и соцсетей.
Функции «AI Студии»
- Фото в стиле (
photo-studio) — загружают фото блюда + выбирают пресет (системный или личный) → AI переносит стиль - Улучшение (
enhance) — загружают фото + описывают желаемое → AI улучшает сцену, сохраняя блюдо - Мои стили — личная библиотека reference-изображений сотрудника (до 50 шт.), используются как кастомные пресеты
- История заданий — список своих заданий с результатами (SSE real-time статус)
- Каталог пресетов — системные пресеты сгруппированы по категориям (bar, delivery, pastry и т.д.)
- Управление пресетами — администраторы могут создавать, редактировать, скрывать системные пресеты
Пользователи
Доступ к сервису получают сотрудники с permission gensvc.access. Типичные роли в терминах бизнеса:
| Профиль | Кто | Permissions |
|---|---|---|
| Контент-менеджер | Создаёт фото для меню и рекламы | gensvc.access, gensvc.photo.create, gensvc.history.read |
| Владелец точки | Полный доступ к студии в рамках своего ЮЛ | gensvc.access, gensvc.photo.create, gensvc.history.read |
| Администратор франшизы | Видит всю историю, управляет пресетами | + gensvc.history.read.all, gensvc.delete, gensvc.preset.admin |
Мультитенантность
Сервис уже хранит
franchise_idв каждом задании — данные разных франшиз изолированы.
Что нужно от других сервисов
| Сервис | Что нужно | Зачем |
|---|---|---|
| Auth Service | POST /internal/auth/validate — валидация JWT + возврат permissions | Вместо JWKS-only валидации сервис будет проверять токены через единый introspection endpoint |
| User Service | Добавить 6 ключей gensvc.* в каталог permissions | Чтобы их можно было назначать ролям в Админке Франшизы |
| Админка Франшизы (фронт) | Категория «AI Студия» в управлении ролями | UI для назначения gensvc.* permissions сотрудникам |
Новые permissions (6 ключей)
| Ключ | Описание |
|---|---|
gensvc.access | Базовый доступ к сервису. Без него — 401 на все endpoints |
gensvc.photo.create | Создание заданий на генерацию/улучшение фото |
gensvc.history.read | Просмотр своей истории заданий |
gensvc.history.read.all | Просмотр истории всех сотрудников франшизы |
gensvc.delete | Удаление заданий (своих или чужих при read.all) |
gensvc.preset.admin | Управление системными пресетами (CRUD) |
Что НЕ входит в текущий скоуп
- Интерфейс «AI Студии» в Админке Франшизы (фронтенд для генерации) — отдельный BR
- Выгрузка результатов напрямую в карточку товара Каталога — Phase 2
- Kafka-события от Photo Studio Service — не требуется в MVP
- Биллинг/лимиты на количество генераций — не требуется в MVP
Принятые решения (2026-05-07, Захар)
Подключение через API Gateway
Photo Studio Service подключается через API Gateway с маршрутом
/api/v1/gensvc/*→http://photo-studio:8080/v1/*(Gateway rewrite). Без отдельного BFF — наш Go-сервис сам отдаёт нужные DTO. Внешний URL (https://photo.nirbi.ru) только для UI; API всегда через Gateway.
UI — отдельный микро-фронт
Фронт AI Студии — отдельный SPA на
photo.nirbi.ru(React + Vite, текущий прототип). В основном фронте Админки Франшизы добавляется только кнопка/ссылка перехода в раздел навигации (видна при наличииgensvc.access). Кнопка → новая вкладка с авто-передачей JWT.
Себестоимость генерации — ~4 ₽ за фото
Polza Nano Banana 2 (
google/gemini-3.1-flash-image-preview) — ~4 ₽ за одно изображение. Приcount=4за один job — ~16 ₽. Лимиты per-franchise/per-user в MVP не вводятся — мониторим биллинг Polza, при росте расходов вводим квоты в Phase 2.
Затронутые сервисы и продукты
| Компонент | Что меняется |
|---|---|
| Photo Studio Service (внешний прототип) | Переключить auth с JWKS на token introspection через Auth Service |
| Auth Service | Без изменений — /internal/auth/validate уже реализован |
| User Service | Добавить 6 ключей gensvc.* в каталог permissions |
| Админка Франшизы (фронт) | Категория «AI Студия» в UI управления ролями |