Документация API Meander Backend
Это полная, техническая документация API бэкенда Meander (Express.js), предназначенная для разработчиков клиентских приложений и библиотек.
Базовые настройки
- Базовый URL:
https://backend.meander.sbs(или ваш локальный URL для разработки) - Формат данных:
application/json(если не указаноmultipart/form-data) - Аутентификация: Большинство роутов требуют JWT токен, передаваемый в заголовке
Authorization.- Формат:
Authorization: Bearer <TOKEN>
- Формат:
1. Аутентификация (Auth)
Аутентификация работает только через Google OAuth 2.0. Вы не можете выпустить токен без реального аккаунта Google. Лимит: 100 запросов в час с одного IP.
Обмен токена Google на токен API
`POST /auth/google/token`
- Body: `{ "idToken": "google_oauth_id_token_here" }`
- Возвращает: `{ "token": "jwt_token_string", "user": { ...profile_data } }`
2. Профили пользователей (Profiles)
Получение чужого профиля
`GET /profiles/:id`
- Возвращает: Статистику пользователя, никнейм, роль, дату регистрации и статус онлайна.
Редактирование своего профиля
`POST /profiles/me`
- Auth: Требуется
- Body (multipart/form-data):
- `full_name` (строка, опционально)
- `bio` (строка, опционально)
- `avatar` (файл, опционально)
Подписка / Отписка
`POST /profiles/:id/follow`
- Auth: Требуется
- Возвращает: `{ "following": true|false }`
Получение достижений (Ачивок)
`GET /profiles/:id/achievements`
- Возвращает: Массив полученных достижений.
Ежедневный Стрик (Streak)
`POST /profiles/update-streak`
- Auth: Требуется
- Возвращает: `{ "streak": N, "last_active_at": "...", "rewardClaimed": true|false }`
Настройки
`GET /profiles/sync-settings` — Настройки облачных сохранений. `POST /profiles/sync-settings` — Обновление настроек (body: `{ "auto_sync": boolean, "sync_on_cellular": boolean }`). `GET /profiles/author-notifs-settings` — Настройки уведомлений. `POST /profiles/author-notifs-settings` — Обновление уведомлений (body: `{ "muted_authors": ["id1"] }`).
3. Квесты (Quests)
Список квестов (Каталог)
`GET /quests`
- Параметры (Query):
- `page` (по умолчанию: 1)
- `limit` (по умолчанию: 10)
- `search` (поиск по названию/тегам)
- `genre` (фильтр по жанру)
- `sort` (`newest`, `popular`, `downloads`, `rating`)
- Возвращает: `{ "quests": [...], "totalPages": N, "currentPage": N }`
Подборки
`GET /quests/featured` — Рекомендованные квесты. `GET /quests/activity/recent` — Недавняя активность (отзывы). `GET /quests/liked-genres` — Квесты по любимым жанрам пользователя.
Детали квеста
`GET /quests/:id`
- Возвращает: Полную информацию о квесте (описание, рейтинг, автор, теги). `GET /quests/:id/screenshots` — Скриншоты.
Взаимодействие
`POST /quests/:id/vote` — Поставить/убрать лайк (Body: `{ "vote": 1 | 0 }`). `POST /quests/:id/download` — Скачать квест (Инкрементирует счетчик, возвращает подписанную ссылку). `POST /quests/:id/review` — Написать отзыв (Body: `{ "rating": 5, "textContent": "..." }`).
4. Облачные сохранения (Cloud Sync)
Синхронизация игрового прогресса (файлов) с сервером.
Получение квоты
`GET /cloud-sync/quota`
- Auth: Требуется
- Возвращает: Использованное место и лимит (базовый 50 МБ, VIP 200 МБ).
Список сохранений
`GET /cloud-sync/quests`
- Auth: Требуется
- Возвращает: Список квестов, для которых есть сохранения на сервере.
Проверка актуальности сохранения
`POST /cloud-sync/quests/:questId/check`
- Auth: Требуется
- Body: `{ "localUpdatedAt": "ISOString" }`
- Возвращает: Какое сохранение новее (`server`, `local`, `conflict`).
Загрузка сохранения (Upload)
`PUT /cloud-sync/quests/:questId`
- Auth: Требуется
- Body (multipart/form-data): Файл сохранения под ключом `file`.
Скачивание сохранения (Download)
`GET /cloud-sync/quests/:questId`
- Auth: Требуется
- Возвращает: Бинарный файл сохранения.
Удаление сохранения
`DELETE /cloud-sync/quests/:questId`
- Auth: Требуется
5. Стена автора (Author Wall)
Каждый автор имеет свою "стену" для новостей, как в соцсетях.
Загрузка картинок для постов
`POST /api/author-walls/upload-media`
- Auth: Требуется
- Body (multipart/form-data): `file`
- Возвращает: URL картинки на CDN.
Лента постов автора
`GET /api/author-walls/:authorId/posts`
- Параметры (Query): `limit`, `offset`, `viewer_id`
- Возвращает: Массив постов.
Получение одного поста
`GET /api/author-walls/posts/:postId`
- Возвращает: Детальную информацию по посту.
Управление постами
`POST /api/author-walls/:authorId/posts` — Создать пост (Body: `{ "content": "Текст", "media_urls": [] }`). `PUT /api/author-walls/posts/:postId` — Изменить пост. `DELETE /api/author-walls/posts/:postId` — Удалить пост. `POST /api/author-walls/posts/:postId/view` — Зарегистрировать просмотр (инкремент счетчика).
Комментарии к постам
`GET /api/author-walls/posts/:postId/comments` — Список комментариев. `POST /api/author-walls/posts/:postId/comments` — Написать комментарий (Body: `{ "content": "Текст", "parentId": "optional_reply_id" }`).
6. Глобальное сообщество (Community)
Глобальная лента
`GET /api/community/feed`
- Параметры (Query): `limit`, `offset`, `viewer_id`, `tab` ("all" или "following")
- Возвращает: Единую ленту постов от всех авторов или только подписок.
Топ авторы
`GET /api/community/top`
- Возвращает: Массив самых популярных профилей.
7. Уведомления (Notifications)
`GET /notifications` — Список уведомлений (Query: `archived=true|false`). `GET /notifications/unread-count` — Количество непрочитанных. `POST /notifications/:id/read` — Пометить как прочитанное. `POST /notifications/:id/archive` — Отправить в архив.
8. ИИ Функции (AI)
Возможности AI доступны за токены (выдаются бесплатно или через донат).
`GET /ai/token-balance` — Текущий баланс ИИ-токенов. `POST /ai/refresh-tokens` — Обновить ежедневные бесплатные токены.
Генерация и исправление
Все POST-запросы требуют передачи `{ "text": "..." }` в Body.
- `POST /ai/fix-text` — Исправление текста (доп. `mode`: "grammar", "style", "expand").
- `POST /ai/translate` — Перевод (доп. `targetLanguage`).
- `POST /ai/suggest-continuation` — Продолжить абзац текста.
- `POST /ai/suggest-button-text` — Сгенерировать текст для кнопок-ответов игрока.
- `POST /ai/generate-keywords` — Генерация тегов для квеста по описанию.
9. Жалобы и Админ-панель (Reports & Admin)
Создать жалобу на контент
`POST /reports`
- Auth: Требуется
- Body:
- `targetType`: "quest" | "profile" | "review" | "wall_post" | "wall_comment"
- `targetId`: UUID
- `reason`: Категория (SPAM, NSFW, SCAM, и т.д.)
- `details`: Комментарий к жалобе
Админ-панель (Только role='admin')
`GET /admin/stats` — Общая статистика по платформе. `GET /reports/admin` — Очередь жалоб на модерацию. `POST /reports/admin/:id/resolve` — Вынести решение по жалобе (Удалить / Игнорировать).