feat: new

This commit is contained in:
luo
2026-09-16 16:32:08 +08:00
parent 6a1543f9f6
commit 8bd9de15cd
22 changed files with 2502 additions and 33 deletions

View File

@@ -0,0 +1,36 @@
## MODIFIED Requirements
### Requirement: Personal notification list SHALL preserve backend ordering
The system SHALL display personal notifications in the backend-fixed order (created time and notification id descending) and SHALL NOT re-sort items client-side by severity or priority.
#### Scenario: Backend returns a fixed order
- **WHEN** the notification list is loaded
- **THEN** the items SHALL be rendered in the returned order
### Requirement: Notification items SHALL pass through popup fields and types
The system SHALL render items with the new `type` values `h5.popup.risk_exchange` and `h5.popup.operation` (category `system`) and SHALL keep `popup_snapshot` available for popup-related actions without treating it as a route.
#### Scenario: List contains a popup notification
- **WHEN** an item has `type` `h5.popup.risk_exchange` or `h5.popup.operation`
- **THEN** the item SHALL render as a normal system-category notification
### Requirement: Unread badge SHALL reflect popup notifications
The system SHALL count popup notifications in the unread badge and collapse the badge to `99+` above 99 per the `display_count` contract.
#### Scenario: Popup notification unread
- **WHEN** a popup notification is unread
- **THEN** the unread badge SHALL increase accordingly
### Requirement: Mark-read SHALL include the notification id and be idempotent
The system SHALL send the notification `id` in the mark-read request body and SHALL treat success responses idempotently.
#### Scenario: Mark-read an already-read notification
- **WHEN** the notification is already read or owned by another customer
- **THEN** the request SHALL still succeed
### Requirement: read-all SHALL NOT close popups implicitly in the popup chain
The system SHALL NOT call `read-all` from any popup display path because it also marks today's popup notifications read.
#### Scenario: Popup display flow
- **WHEN** the popup candidate flow runs
- **THEN** the system SHALL NOT call `read-all`