документация(шлюз): вход через cookie, сроки и защита ответов
Зачем: страница описывала cookie без срока и с общим путём, не было защиты ответов Identity и новых правил фронтенда после PR #203.
Как работает: access-cookie живёт до exp JWT, refresh-cookie до refreshExpiresAt на пути /api/v1/auth, старая refresh-cookie на / удаляется; неполный ответ с токенами даёт 502, любой 2xx auth с полем токена в JS не уходит, путь сравнивается после нормализации; 401 на входе не запускает refresh.
Задача: #163
9b8ef23
документация(каталог): фильтр дат вылета, диапазон и коды ошибок
Зачем: описать поведение фильтра дат после мержа.
Как работает: календарный день, диапазон 2000-2100, коды date_range и database_error.
Задача: #204
64c8972
документация(фронтенд): заявка и избранное с карточки после входа
Зачем: в описании фронтенда не было отложенного действия после входа, а пример с заявкой описывал старое поведение.
Как работает: гостю открывается окно входа, намерение хранится в uiStore. После входа страница тура сама открывает окно заявки, а resumeFavoriteIntent добавляет тур в избранное. При ошибке загрузки избранного или тура намерение стирается и показывается тост.
Задача: #191
675695a
документация(wiki): деплой и откат ставят код из коммита IMAGE_TAG в Doc-Infrastructure
Задача: #201
7e6671d
документация(wiki): формат access-лога frontend в Doc-Infrastructure
Зачем: после исправления дублей (#157) описать, как читать access-лог nginx и почему рядом бывают строки 301 и 200.
Как работает: в раздел «Логи» добавлен пункт про формат ta_masked, маску access_token и /healthz.
acb5265
документация(media): назначение tour-image в gRPC, проверка фото тура и флаг IsPublic
Зачем: после PR #178 Media открывает только фото туров, а Catalog отклоняет чужие и не те файлы одним кодом; Doc-Media описывала старое поведение.
Как работает: GetMediaFiles передаёт purpose, MarkMediaFilesPublic ставит IsPublic только активным tour-image; PUT images и publish проверяют владельца и назначение, иначе 422 images.notFound, пустое назначение отклоняется; флаг не снимается при удалении фото из тура и снятии тура с публикации; добавлено пояснение о проверке на обеих сторонах.
Задача: #164
ed74ac2
документация(wiki): логирование ошибок после мержа
Зачем: PR #181 смержен в main (10acbde), пометки «действует после мержа PR #181» в Doc-Architecture и Doc-Identity устарели.
Как работает: строка Warning для 4xx описана с текстом исключения, access-лог для 4xx как Information, для 5xx как Error. Вопрос про исключение в access-логе снят по коду main: UseTravelAgencyRequestLogging стоит снаружи GlobalExceptionHandlerMiddleware, обработчик исключение не пробрасывает.
Задача: #13
0d93a5e
документация(wiki): логирование ошибок 4xx и 5xx
Зачем: Doc-Architecture и Doc-Identity описывали поведение из PR #181 как уже работающее в main, а Wiki-Rules допускает на Doc- страницах только то, что работает в main.
Как работает: раздел «Логирование ошибок» описывает текущее правило main (4xx один раз как Warning без стектрейса, 5xx как Error со стектрейсом, Gateway без маппера даёт 500 и Error), а текст исключения в Warning и уровень access-лога для 4xx помечены «действует после мержа PR #181».
Задача: #13
2a1dfcb
документация(wiki): порты для запуска без Docker в Doc-Local-Development
Зачем: launch-профили выровнены с адресами Gateway и получили свои gRPC-порты (#165), пометка «требует проверки» больше не нужна.
Как работает: вместо абзаца о несовпадающих портах раздел «Запуск без Docker» с примером и таблицей HTTP и gRPC портов.
Задача: #165
32957f8
документация(wiki): своё правило gitleaks в таблице CI/CD
Зачем: Secret scan теперь ловит и пароли в строках подключения (#160), это видно из описания CI.
Как работает: в строку gitleaks.yml таблицы CI/CD добавлено своё правило connection-string-password.
Задача: #160
3a4389c
документация(wiki): volume с данными, которые переживают деплой
Зачем: ключи DataProtection Gateway вынесены в volume (#158); в Doc-Infrastructure не было списка volume и того, что в них хранится.
Как работает: новый раздел «Данные, которые переживают деплой» с таблицей postgres-data, minio-data, gateway-dp-keys.
Задача: #158
77f6d01
документация(wiki): назначение файла в публичности и коде ошибки
Зачем: к туру крепится только фото тура, а чужой, неизвестный и другой purpose отвечают одним кодом.
Как работает: Doc-How-Tour-Publishing, Doc-How-Images, Doc-Catalog и Doc-gRPC-Contracts описывают проверку tour-image и единый images.notFound. Doc-Media в этой правке не менялся.
Задача: #183
d7cc3c9
документация(wiki): публичный GET /media/{id} только для tour-image
Зачем: страница разрешала любой публичный файл и не говорила, что удалённое фото тура остаётся публичным.
Как работает: первая проверка это публичный tour-image; другой purpose идёт по правилам владельца. Флаг IsPublic у фото опубликованного тура не снимается.
Задача: #162
dde23d0
документация(wiki): текст мастера при 503 на сохранении фото
Зачем: при недоступном Media мастер показывает отдельный текст и не сбрасывает выбранные фото.
Как работает: Doc-How-Tour-Publishing описывает этот текст рядом с ответом 503 на PUT images.
Задача: #164
c3f795c
документация(wiki): уровень лога для ожидаемого 401
Зачем: в вики не было, что неверный пароль пишется как Warning без стектрейса.
Как работает: Doc-Architecture и Doc-Identity описывают, что 401, 403, 404 и валидация идут как Warning, а 5xx как Error со стектрейсом.
Задача: #13
156ec6a
документация(wiki): правило доступа к GET /media/{id}
Зачем: страницы описывали отдачу любого файла любому вошедшему и помечали это как требующее проверки.
Как работает: публичный файл, владелец, Manager или Admin получают оригинал; чужой непубличный файл отвечает 404.
Задача: #162
bb335d8
документация(wiki): фото опубликованного тура открываются при сохранении
Зачем: страницы описывали, что замена фото у опубликованного тура оставляет новые файлы закрытыми, и стояла пометка «требует проверки».
Как работает: Doc-How-Tour-Publishing, Doc-How-Images, Doc-Media, Doc-gRPC-Contracts и раздел расхождений Doc-ADR-001-Tour-Model описывают вызов MarkMediaFilesPublic до сохранения. Пометка по #164 снята.
Задача: #164
0bf3e34
документация(wiki): ссылки на задачи для пометок «требует проверки»
Зачем: у каждой пометки «требует проверки» должна быть задача, чтобы пометку сняли вместе с исправлением.
Как работает: пометки на страницах Doc-Public-API, Doc-Media, Doc-How-Auth, Doc-How-Tour-Publishing, Doc-How-Images, Doc-ADR-001-Tour-Model, Doc-Local-Development и Doc-Architecture ссылаются на задачи #162 ... #166; в Doc-Architecture уточнено, что OTLP-экспорт есть только у Gateway. В Wiki-Rules добавлено правило о ссылке на задачу.
34d741f
документация(wiki): пример заглушки в Wiki-Rules без живой ссылки
Зачем: пример строки-заглушки рендерился как ссылка на несуществующую страницу.
Как работает: пример оформлен как код, проверка ссылок проходит без находок.
836660e
документация(wiki): новая структура вики
Зачем: вики расходилась с кодом и смешивала описание текущей системы с планами; читателю было непонятно, что уже работает, а что только задумано.
Как работает: страницы разделены на два раздела. Doc-* описывают систему по коду main ee729b8 (архитектура, инфраструктура и деплой, публичный API по конфигурации Gateway и контроллерам, gRPC, сервисы, фронтенд, сценарии входа, публикации тура, картинок, заявок и чата). Plan-* содержат видение, дорожную карту со статусами и спецификации этапов. Добавлены Wiki-Rules, шаблон ТЗ и _Footer, старые страницы удалены, Product-Vision оставлен ссылкой на Plan-Product-Vision. Места, где код и прежние решения расходятся или поведение неочевидно, помечены «требует проверки».
e0b1d6a
документация(вики): правило о секретах и чувствительных данных
37fb959
документация(инфраструктура): домен как настройка окружения, чек-лист смены домена
7c13073
MVP-1 контракты: картинки только по id файла (PR #82, #75)
62b080e
MVP-1-API-Contracts: публичный и manage API каталога туров (#76)
db953dd
ADR-001: ограничение сидеров по id владельца (#70)
4e54a82
ADR-001: модель тура этапа 1, версия через Tours.Version вместо xmin
9c423de
Remove documentation gap page and references.
Delete the docs-vs-code mismatch page and keep only consolidated project documentation with direct technical notes in service and API pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
d6389cc
Restructure wiki into complete product documentation.
Remove MVP and implementation-phase wording, refresh navigation, and add full architecture, service, API, and gRPC reference pages in a final-state format.
Co-authored-by: Cursor <cursoragent@cursor.com>
3d335a6
Add Implementation Details and update sidebar links
- Introduced a new section detailing the implementation structure of the TravelAgency project, including service organization and inter-service communication.
- Updated the sidebar to include links to the new Implementation Details and additional service documentation for Identity, Catalog, Booking, Chat, and Media.
c6553d5