commit 17bfa26689bac8197c20fe9eebda7a2c9448e5be Author: mixa Date: Mon Jun 15 00:19:37 2026 +0300 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..7eb88f1 --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# Fable Media Platform + +Рабочий scaffold по `plan.md` и `ТЗ_единый.md`: университетская платформа управления медиаконтентом, а не общий сайт университета. + +## Что реализовано + +- React + TailwindCSS frontend на русском языке. +- Публичный контур: главная, каталог, поиск, материалы, медиа, мероприятия как тип контента, спикеры. +- Персонифицированный контур: демо-вход, профиль, роли, подписки, уведомления, комментарии. +- Административный контур: dashboard, пользователи и роли, очередь модерации, журнал действий, форма черновика. +- Elysia gateway на Node.js с CORS, request ID, rate limiting, service proxy, token-style fallback auth и RBAC checks. +- Go microservices для auth, user, content, taxonomy, speaker, subscription, notification, comment, search, analytics, audit, media. +- Рабочие backend endpoints: регистрация, вход, профиль, контент CRUD, медиа, категории, теги, спикеры, подписки, уведомления, комментарии, поиск, аналитика, admin users/roles/audit. +- PostgreSQL migration для сущностей из ТЗ. +- Docker Compose для локального запуска всех контуров. + +Все данные в интерфейсе и API являются явно демонстрационными заглушками. Реальные люди, подразделения, интеграции, юридические сведения и брендовые материалы не добавлялись. + +Backend сейчас использует in-memory demo store внутри Go-сервисов. PostgreSQL schema и Docker PostgreSQL подготовлены, но постоянное хранение через БД остается следующим этапом. + +## Локальный запуск + +Установить зависимости: + +```bash +npm install +``` + +Запустить весь проект без Docker: + +```bash +npm run dev +``` + +Это одновременно запускает Go backend services, Node gateway и React/Vite frontend. + +Запустить backend без Docker: все Go-сервисы + Node gateway: + +```bash +npm run dev:backend +``` + +Запустить только gateway с fallback demo API: + +```bash +npm run dev:gateway +``` + +В обычном локальном режиме gateway работает с fallback demo API, если Go-сервисы не запущены и `*_SERVICE_URL` не заданы. + +Запустить frontend: + +```bash +npm run dev:web +``` + +Проверить Go services: + +```bash +npm run test:go +``` + +Docker сейчас необязателен. Для текущей разработки используйте `npm run dev:backend` и `npm run dev:web`. + +Запуск всего окружения через Docker, если он понадобится позже: + +```bash +docker compose up --build +``` + +В Docker Compose gateway проксирует `/api/*` в Go-сервисы. Frontend nginx также проксирует `/api/*` в gateway, поэтому `http://localhost:5173` работает как единое приложение. + +Frontend: `http://localhost:5173`. + +Gateway health: `http://localhost:3000/health`. + +Internal services health through gateway: `http://localhost:3000/api/services/health`. + +## Демо-вход + +Логин: `demo_admin` + +Пароль: `demo_password` + +Auth service принимает демо-учетную запись и возвращает demo token. Это не production-аутентификация; для промышленного контура нужен подписанный JWT или другой проверяемый token format. + +## Backend API + +- `POST /api/auth/register`, `POST /api/auth/login`, `GET /api/auth/me`, `POST /api/auth/logout`, `POST /api/auth/change-password` +- `GET /api/content`, `GET /api/content/:id`, `POST /api/content`, `PATCH /api/content/:id`, `DELETE /api/content/:id` +- `GET /api/media`, `GET /api/events`, `GET /api/categories`, `GET /api/tags`, `GET /api/speakers` +- `GET /api/search?q=...`, `GET /api/subscriptions`, `POST /api/subscriptions` +- `GET /api/notifications`, `PATCH /api/notifications/:id/read` +- `GET /api/comments/:contentId`, `POST /api/comments/:contentId` +- `GET /api/analytics/summary`, `GET /api/admin/dashboard`, `GET /api/admin/users`, `GET /api/admin/roles`, `GET /api/admin/audit` + +## Открытые вопросы из плана + +- Финальное название платформы. +- Разрешенные логотипы и брендовые материалы. +- Источник реальных данных для миграции. +- Точная матрица ролей и прав. +- Являются ли мероприятия отдельной сущностью или типом контента. +- Production runtime и инфраструктура для gateway. +- Формулы показателей эффективности контента.