Добавить просмотр лайков сообщений канала

This commit is contained in:
AidarKC
2026-09-09 17:01:13 +03:00
parent 9f77c54955
commit 2d059e9ff5
11 changed files with 595 additions and 20 deletions
+66 -8
View File
@@ -14,13 +14,16 @@
3. `GetMessageThread` — отдает дерево обсуждения вокруг конкретного сообщения:
предки, фокус-сообщение, потомки.
4. `GetPersonalDiary` — отдает виртуальную ленту `Личный дневник`, собранную из `STATUS_ACTION` текущего пользователя.
4. `GetMessageLikes` — отдает списки пользователей, поставивших лайк сообщению,
сгруппированные для UI по статусу профиля.
5. `GetChannelsCounters` — отдает счетчики разделов каналов для пользователя.
5. `GetPersonalDiary` — отдает виртуальную ленту `Личный дневник`, собранную из `STATUS_ACTION` текущего пользователя.
6. `ListGroupChats200` — отдает список групповых чатов типа `200`.
6. `GetChannelsCounters` — отдает счетчики разделов каналов для пользователя.
7. `GetGroupDialog` — отдает сообщения конкретного группового чата типа `200`.
7. `ListGroupChats200` — отдает список групповых чатов типа `200`.
8. `GetGroupDialog` — отдает сообщения конкретного группового чата типа `200`.
> На первом этапе мы **не используем курсоры** (`nextCursor`) и загружаем полные списки.
>
@@ -266,7 +269,62 @@
---
## 4) GetPersonalDiary
## 4) GetMessageLikes
Возвращает пользователей, которые поставили лайк конкретному сообщению канала.
- `message.blockchainName`, `message.blockNumber`, `message.blockHash` должны указывать на исходное сообщение.
- `limit` ограничивается сервером сверху значением `1000`.
- Пользователи группируются по состоянию профиля:
- `shining``account_role=primary` и `shine_status=shining`;
- `official``account_role=primary`, но без `shine_status=shining`;
- `others` — остальные пользователи.
### Request
```json
{
"op": "GetMessageLikes",
"requestId": "req-4",
"payload": {
"message": {
"blockchainName": "bob-001",
"blockNumber": 140,
"blockHash": "..."
},
"limit": 1000
}
}
```
### Response (success)
```json
{
"op": "GetMessageLikes",
"requestId": "req-4",
"status": 200,
"ok": true,
"payload": {
"shining": [
{ "login": "Alice", "firstName": "Alice", "lastName": "", "avatarAr": "ArweaveTxId..." }
],
"official": [],
"others": [
{ "login": "Carl", "firstName": "", "lastName": "", "avatarAr": "" }
],
"total": 2,
"truncated": false
}
}
```
### Ошибки
- `bad_fields` — не передан `message` или обязательные поля ссылки на сообщение.
- `bad_hash``message.blockHash` не является корректным hex-хэшем блока.
- `internal_error` — внутренняя ошибка чтения.
---
## 5) GetPersonalDiary
Возвращает виртуальный канал `Личный дневник` для самого пользователя.
@@ -289,7 +347,7 @@
---
## 4) GetChannelsCounters
## 6) GetChannelsCounters
### Request
```json
@@ -321,7 +379,7 @@
---
## 5) ListGroupChats200
## 7) ListGroupChats200
### Request
```json
@@ -361,7 +419,7 @@
---
## 6) GetGroupDialog
## 8) GetGroupDialog
### Request
```json
+25 -1
View File
@@ -8,6 +8,7 @@
- `ListSubscriptionsFeed` — экран списка каналов.
- `GetChannelMessages` — сообщения конкретного канала.
- `GetMessageThread` — дерево обсуждения для сообщения.
- `GetMessageLikes` — списки пользователей, поставивших лайк сообщению.
2. **UI вкладки Каналы**:
- при открытии пытается загрузить реальный feed с сервера;
@@ -33,12 +34,14 @@
1. Вызвать `ListSubscriptionsFeed`.
2. Для канала `ownedChannels[0]` вызвать `GetChannelMessages`.
3. Для первого `messages[0]` вызвать `GetMessageThread`.
4. Для первого `messages[0]` вызвать `GetMessageLikes`.
### Ошибки
1. `ListSubscriptionsFeed` с пустым login -> `bad_fields`.
2. `GetChannelMessages` с битым channel payload -> `bad_fields`.
3. `GetMessageThread` с несуществующим block -> `message_not_found`.
4. `AddBlock(CreateChannel)` с уже существующим именем -> `channel_name_already_exists`.
4. `GetMessageLikes` с битым `message.blockHash` -> `bad_hash`.
5. `AddBlock(CreateChannel)` с уже существующим именем -> `channel_name_already_exists`.
---
@@ -91,6 +94,22 @@
}
```
## 3.4 GetMessageLikes
```json
{
"op": "GetMessageLikes",
"requestId": "debug-likes-1",
"payload": {
"message": {
"blockchainName": "TestUser1-001",
"blockNumber": 123,
"blockHash": "<hash-from-GetChannelMessages>"
},
"limit": 1000
}
}
```
---
## 4) Что смотреть в ответах
@@ -115,6 +134,11 @@
- у узлов должны быть версии и счетчики.
- у каждого узла дополнительно может приходить `rawBlockB64` (Base64 сырого `block_bytes`).
### GetMessageLikes
- `payload.shining[]`, `payload.official[]`, `payload.others[]` — группы пользователей.
- у каждого пользователя есть `login`, `firstName`, `lastName`, `avatarAr`.
- `payload.truncated=true` означает, что сервер обрезал список по `limit`.
### Важно по совместимости
- `rawBlockB64` добавлен только в `GetMessageThread`.
- `GetChannelMessages` не содержит `rawBlockB64` (без изменений формата ленты).
+1
View File
@@ -46,6 +46,7 @@
| `ListSubscriptionsFeed` | `06_Channels_Read_API.md` | лента каналов/подписок |
| `GetChannelMessages` | `06_Channels_Read_API.md` | сообщения канала |
| `GetMessageThread` | `06_Channels_Read_API.md` | тред сообщения |
| `GetMessageLikes` | `06_Channels_Read_API.md` | списки пользователей, поставивших лайк сообщению |
| `GetPersonalDiary` | `06_Channels_Read_API.md` | виртуальный канал `Личный дневник` из STATUS_ACTION |
| `GetChannelsCounters` | `06_Channels_Read_API.md` | счетчики разделов каналов |
| `ListGroupChats200` | `06_Channels_Read_API.md` | список групповых чатов типа `200` |