Backend Backlog — найден через /admin/testing
Сгенерировано из реального прогона tourist API smoke-тестов.
✓ Уже починено (2026-05-13)
| # |
Симптом |
Корень |
Фикс |
| 1 |
GET /modules → 500 «Ошибка получения модулей» |
Caddy роутил /modules в hotel_api_v2 (монолит) → монолит проксировал в Supabase Edge Function которой нет |
Caddy: /modules → arkhyz-platform-svc:8000 + rebuild platform-svc (контейнер имел stale code без module_access router) |
| 2 |
POST /tour-bookings, /transfers/bookings, /restaurants/.../table-bookings, /instructors/booking/{id} → 500 «invalid input for query argument» |
asyncpg падал когда фронт слал не-UUID в path/body |
services/booking-svc/app/main.py: глобальный @app.exception_handler(asyncpg.DataError) → 422 detail |
| 3 |
Дубль splash-screen на cold-boot |
<AuthOverlay> + <ExtendedLoadingState> оба монтировали <LoaderScreen> на z-9999 |
OptimizedAppRoutes.tsx: на cold-boot <Route element={null} /> — AuthOverlay сам покрывает экран |
| 4 |
YK return_url захардкожен на сайт |
create_payment брал из БД |
services/booking-svc/app/yookassa.py: return_url параметризован, клиент шлёт через заголовок X-Return-URL |
⏳ Backlog — что осталось (28 endpoints)
Критичные (нужны для core UX) — приоритет P0
| Endpoint |
Проблема |
Где исправить |
GET /bookings/ |
404 — список броней туриста (история) не работает |
services/booking-svc/app/routers/bookings.py — добавить GET листинг с фильтром user_id=me |
POST /reviews |
405 — нельзя оставить отзыв |
api-admin/app/routers/reviews.py (или новый микросервис social) — добавить POST с валидацией target_type/target_id |
PUT /users/me |
405 — нельзя редактировать профиль |
services/auth-svc/app/routers/users.py (или api-admin) — добавить PUT с pydantic-моделью партиальных полей |
POST /users/password |
405 — нельзя сменить пароль |
то же место, добавить POST с current_password + new_password |
GET /payments/history |
404 — история платежей в кабинете не работает |
services/booking-svc/app/routers/payments.py — добавить GET с фильтром по user_id |
POST /favorites/{type}/{id} + GET /favorites/{type} + DELETE /favorites/{type}/{id} |
404/405 — нельзя избранное |
api-admin/app/routers/favorites.py (новый) — таблица public.favorites(user_id, type, target_id) уже есть; нужны 3 endpoints |
GET /notifications/unread-count |
404 — счётчик колокольчика не работает |
services/platform-svc/app/routers/notifications.py — добавить GET /notifications/unread-count → {count: int} |
POST /notifications/mark-all-read |
404 — кнопка «прочитать всё» |
то же место — добавить POST |
Важные (UX, не критично) — P1
| Endpoint |
Проблема |
Где исправить |
GET /events, GET /events/{id} |
404 — раздел «События» пустой |
новый router в catalog-svc или монолите |
GET /transfers/routes |
404 — список маршрутов трансферов |
services/booking-svc или catalog-svc — добавить GET-листинг (есть /transfers/{id}) |
GET /badges, GET /leaderboard |
404 — геймификация |
services/gamification-svc/app/routers/ — нужны эти endpoints |
GET /chats, POST /chats |
404 — чаты не работают |
services/chat-svc/app/routers/ — есть /p2p-chats/* но не /chats |
GET /tracking/{stats,targets}, POST /tracking/sessions |
404 — трекинг неполный |
services/resort-svc/app/routers/tracking.py — добавить |
POST /sos/request |
404 — SOS не работает |
services/platform-svc — добавить router |
POST /support/tickets |
500 — не создаются тикеты |
api-admin/app/routers/support.py:107 — таблица support_tickets отсутствует в БД ИЛИ get_current_user_id() падает при отсутствии auth |
GET /ai/recommendations |
404 — нет AI рекомендаций |
services/...-svc — добавить router |
Низкий приоритет — P2
| Endpoint |
Проблема |
POST /push/subscribe |
405 — push-уведомления не настраиваются |
POST /ski-pass/{purchase,validate} |
405 — ски-пасс не покупается |
POST /insurance/purchase |
405 — страховка не покупается |
POST /role-requests |
405 — заявка на партнёра |
POST /friends/invite, GET /friends/live |
404 — друзья на склоне |
POST /payments/yk/webhook |
404 — нет webhook handler от ЮKassa (но webhooks работают через другой путь?) |
Сервис-уровень
| Что |
Состояние |
Что делать |
tracking-svc контейнер |
Нет в podman ps |
Нет такого микросервиса — трекинг живёт в resort-svc. Test 503 был транзиентный |
gamification-svc |
Up, но без бизнес-endpoints |
Развернуть routers под /badges, /leaderboard |
chat-svc |
Up, но конфигурация роутинга |
В Caddy путь /chats/* либо не настроен, либо роутится не туда |
Как тестировать после фикса
- Зайди на
/admin/testing → таб «Турист» → нажми «Запустить все проверки»
- Сравни кол-во HTTP 404/405/500 с предыдущим прогоном — должно уменьшаться
- Конкретный сценарий по id (например
tourist-api-bookings-history) → жми «Тест» — должен отдать ожидаемый shape
- Экспорт MD из отчёта → diff между прогонами
Стратегия имплементации
- Фаза А (1-2 дня): P0 endpoints — это разблокирует основной UX
- Фаза Б (2-3 дня): P1 — события/транспорт/чаты
- Фаза В (1 день): P2 — мелочь, low-priority
- Фаза Г: расширить тесты на партнёрские роли (hotelier/touroperator/...) — там тоже нужны API smokes
Каждая фаза = 1 коммит + прогон /admin/testing → отчёт в этом репо.