6.9 KiB
Backend Stabilization Design
[S1] Контекст
Репозиторий уже содержит три основных слоя: apps/web, apps/gateway и Go-сервисы в services/. Сейчас проект не доведен до почти production-состояния по трем причинам: установка и сборка из корня не подтверждены, frontend частично опирается на mock-данные, а backend хранит состояние в demo/in-memory store.
Цель этой спецификации: определить первый под-проект, который переведет приложение из состояния scaffold/demo в состояние почти production-демо с реальным backend-контуром.
[S2] Цель первого под-проекта
Первый под-проект называется backend stabilization.
Его результат:
- проект воспроизводимо устанавливается и собирается из корня репозитория;
- gateway и Go-сервисы работают на PostgreSQL, а не на in-memory store;
- frontend перестает зависеть от mock-only ядра в основных сценариях;
- аутентификация, авторизация и сохранение данных становятся реальными и повторяемыми;
- локальный запуск и Docker-окружение дают одинаково рабочий backend-контур.
[S3] Объем и границы
В объем первой фазы входят:
- реальные данные для
auth,users/me,content,categories,tags,speakers,subscriptions,notifications,comments,search,admin,analytics summary,media metadata/upload; - password hashing, access token, проверка текущего пользователя, logout, защита маршрутов;
- миграции и seed-данные для стартовых ролей, аккаунтов и базовых сущностей;
- smoke/integration verification для критического пути.
В первую фазу не входят:
- внешняя production-инфраструктура вне репозитория;
- CDN или объектное хранилище;
- полный UI-polish всех экранов;
- расширенная аналитика сверх уже существующих экранов и summary-метрик.
[S4] Архитектурный подход
Архитектура сохраняется существующая:
apps/webостается клиентом;apps/gatewayостается единой внешней точкой входа;services/cmd/*остаются отдельными Go-процессами;database/и миграции становятся источником истины для схемы данных.
Ключевой принцип этой фазы: не переписывать систему заново и не вводить тяжелую новую абстракцию без необходимости. Минимальный путь — заменить текущее общее demoStore на PostgreSQL-backed хранилище, сохранив текущие HTTP-контракты везде, где это возможно.
Новые или уточненные backend-компоненты:
- конфигурация для DSN, токен-секретов, TTL и внутренних URL;
- GORM-backed persistence слой поверх PostgreSQL;
- auth-логика для хэша паролей и проверки токенов;
- seed/bootstrap слой для стартовых данных;
- реальные health checks для gateway и сервисов.
[S5] Потоки данных
Целевой поток запроса:
- frontend отправляет запрос только в gateway;
- gateway валидирует запрос, извлекает токен, определяет пользователя и применяет базовые RBAC-проверки;
- gateway проксирует запрос в нужный Go-сервис;
- Go-сервис читает и записывает состояние в PostgreSQL;
- ответ возвращается через gateway в единообразном JSON-формате.
Скрытый local fallback и demo-token перестают быть основным режимом работы. Для разработки допускаются только явные seed-данные, а не подмена настоящих ответов моками при ошибках backend-контура.
[S6] Ошибки, безопасность и наблюдаемость
Требования этой фазы:
- единый error response через gateway: код, сообщение, request ID;
- корректные
401и403для защищенных endpoint'ов; - health endpoints должны отражать реальное состояние зависимостей, включая БД;
- request ID должен проходить через gateway и сервисы для трассировки;
- пароли хранятся только в хэшированном виде;
- защищенные маршруты не должны обходиться demo-механикой.
[S7] Проверка готовности
Работа считается завершенной, когда подтверждены все пункты:
- чистая установка зависимостей и сборка проекта из корня;
- успешный
npm run check; - успешный локальный запуск backend и frontend;
- критические API-сценарии проходят в smoke/integration verification;
- данные сохраняются в PostgreSQL и переживают перезапуск сервисов.
Минимальный критический путь для проверки:
- login;
GET /api/auth/me;- список и изменение контента;
- создание комментария;
- создание подписки;
- admin users;
- audit log;
- analytics summary.
[S8] Решения по объему
Путь выполнения для этой спецификации: backend-first.
Это означает, что в первой фазе приоритет отдается реальности backend-контура, API, БД, auth и repeatable verification. Frontend должен быть совместим с результатом, но крупные визуальные доработки не входят в критический путь этой спецификации.