docs(specs): archive api contract resilience remediation
This commit is contained in:
@@ -123,3 +123,40 @@
|
||||
#### Scenario: Выход из настроек
|
||||
- **WHEN** пользователь нажимает logout на `/settings`
|
||||
- **THEN** клиент очищает локальную сессию и cache и направляет пользователя на `/login` независимо от результата сетевого запроса
|
||||
|
||||
### Requirement: Единый HTTP contract успешных auth endpoints
|
||||
Успешные `POST /api/v1/auth/register`, `POST /api/v1/auth/login` и
|
||||
`POST /api/v1/auth/refresh` MUST отвечать HTTP `200`; опубликованный
|
||||
OpenAPI-документ, зафиксированный frontend snapshot и сгенерированные
|
||||
transport types MUST описывать этот же status. Каждая операция сохраняет свои
|
||||
существующие payload, refresh-cookie и session semantics. Logout MUST
|
||||
продолжать отвечать `204`.
|
||||
|
||||
#### Scenario: Успешная регистрация возвращает контрактный status
|
||||
- **WHEN** пользователь отправляет новую валидную регистрацию
|
||||
- **THEN** система устанавливает refresh-cookie, возвращает профиль и access
|
||||
token с HTTP `200`
|
||||
|
||||
#### Scenario: Успешный login или refresh возвращает контрактный status
|
||||
- **WHEN** пользователь успешно входит либо восстанавливает Session
|
||||
- **THEN** система устанавливает или заменяет refresh-cookie, возвращает
|
||||
профиль и access token с HTTP `200`
|
||||
|
||||
### Requirement: Клиент контролируемо завершает неуспешный refresh
|
||||
Frontend MUST обрабатывать HTTP и транспортную ошибку общего refresh flow без
|
||||
необработанного отклонения Promise. При неуспешном cold-start refresh frontend
|
||||
MUST завершить инициализацию как неавторизованный, не сохраняя access token
|
||||
или профиль. При неуспешном refresh после защищённого запроса frontend MUST
|
||||
очистить in-memory session и query cache перед existing navigation to login.
|
||||
|
||||
#### Scenario: Cold-start refresh завершается транспортной ошибкой
|
||||
- **WHEN** приложение запускается без access token и refresh запрос не может
|
||||
получить транспортный response
|
||||
- **THEN** frontend завершается в готовом неавторизованном состоянии без
|
||||
необработанного отклонения Promise и показывает обычный public/login flow
|
||||
|
||||
#### Scenario: Повторный refresh после protected 401 завершается транспортной ошибкой
|
||||
- **WHEN** защищённый API отвечает `401`, а единственный serialised refresh
|
||||
завершается транспортной ошибкой
|
||||
- **THEN** frontend очищает in-memory session и query cache и направляет User
|
||||
в существующий login flow без необработанного отклонения Promise
|
||||
|
||||
Reference in New Issue
Block a user