Добавить состояние чтения каналов

This commit is contained in:
AidarKC
2026-09-09 18:59:54 +03:00
parent 2d059e9ff5
commit 8e86872aa7
29 changed files with 2538 additions and 231 deletions
+30 -4
View File
@@ -9,6 +9,7 @@
- `GetChannelMessages` — сообщения конкретного канала.
- `GetMessageThread` — дерево обсуждения для сообщения.
- `GetMessageLikes` — списки пользователей, поставивших лайк сообщению.
- `SetChannelReadState` — подписанный watermark чтения канала.
2. **UI вкладки Каналы**:
- при открытии пытается загрузить реальный feed с сервера;
@@ -35,13 +36,15 @@
2. Для канала `ownedChannels[0]` вызвать `GetChannelMessages`.
3. Для первого `messages[0]` вызвать `GetMessageThread`.
4. Для первого `messages[0]` вызвать `GetMessageLikes`.
5. Для подписанного канала вызвать `SetChannelReadState` с текущим `messagesCount`.
### Ошибки
1. `ListSubscriptionsFeed` с пустым login -> `bad_fields`.
2. `GetChannelMessages` с битым channel payload -> `bad_fields`.
3. `GetMessageThread` с несуществующим block -> `message_not_found`.
4. `GetMessageLikes` с битым `message.blockHash` -> `bad_hash`.
5. `AddBlock(CreateChannel)` с уже существующим именем -> `channel_name_already_exists`.
5. `SetChannelReadState` без активной подписки -> `CHANNEL_NOT_FOLLOWED`.
6. `AddBlock(CreateChannel)` с уже существующим именем -> `channel_name_already_exists`.
---
@@ -104,8 +107,24 @@
"blockchainName": "TestUser1-001",
"blockNumber": 123,
"blockHash": "<hash-from-GetChannelMessages>"
},
"limit": 1000
}
}
}
```
## 3.5 SetChannelReadState
```json
{
"op": "SetChannelReadState",
"requestId": "debug-read-state-1",
"payload": {
"login": "TestUser1",
"owner_bch_name": "TestUser2-001",
"channel_name": "news",
"read_count": 25,
"time_ms": 1760000000000,
"client_key": "<base64-client-public-key>",
"signature": "<base64-ed25519-signature>"
}
}
```
@@ -120,6 +139,8 @@
- у каждой записи есть:
- `channel.channelRoot.blockNumber`,
- `messagesCount`,
- `unreadCount`,
- `readStateInitialized`,
- `lastMessage` (может быть null, если сообщений нет).
### GetChannelMessages
@@ -137,7 +158,12 @@
### GetMessageLikes
- `payload.shining[]`, `payload.official[]`, `payload.others[]` — группы пользователей.
- у каждого пользователя есть `login`, `firstName`, `lastName`, `avatarAr`.
- `payload.truncated=true` означает, что сервер обрезал список по `limit`.
- `payload.truncated` сейчас всегда `false`; поле оставлено для совместимости и будущей пагинации.
### SetChannelReadState
- `payload.read_count` — сохраненная позиция чтения.
- `payload.unread_count` — пересчитанный unread для канала.
- `payload.applied=false` означает, что на сервере уже была более новая signed-позиция.
### Важно по совместимости
- `rawBlockB64` добавлен только в `GetMessageThread`.