Files
SHiNE-server/docs/API/11_Connections_API.md
T

4.6 KiB

API для разработчиков: связи пользователей

Документ описывает операции чтения и записи пользовательских связей.

Текущие операции:

  • GetFriendsLists
  • ListContacts
  • GetUserConnectionsGraph
  • AddCloseFriend

1. GetFriendsLists

Запрос

{
  "op": "GetFriendsLists",
  "requestId": "friends-001",
  "payload": {
    "login": "alice"
  }
}

Успешный ответ

{
  "op": "GetFriendsLists",
  "requestId": "friends-001",
  "status": 200,
  "ok": true,
  "payload": {
    "login": "Alice",
    "out_friends": ["Bob"],
    "in_friends": ["Kate"]
  }
}

2. ListContacts

ListContacts использует текущую авторизованную сессию. В payload нет дополнительных полей.

Запрос

{
  "op": "ListContacts",
  "requestId": "contacts-001",
  "payload": {
  }
}

Успешный ответ

{
  "op": "ListContacts",
  "requestId": "contacts-001",
  "status": 200,
  "ok": true,
  "payload": {
    "login": "Alice",
    "dialogs": [
      {
        "peerLogin": "Bob",
        "relationFlag": "close_friend",
        "lastMessageBlobB64": "U0hpTkVfRE0B...",
        "lastMessageTimeMs": 1774700000123,
        "unreadCount": 2,
        "hasDialog": true
      },
      {
        "peerLogin": "Kate",
        "relationFlag": "contact",
        "lastMessageBlobB64": "",
        "lastMessageTimeMs": 0,
        "unreadCount": 0,
        "hasDialog": false
      },
      {
        "peerLogin": "Mira",
        "relationFlag": "none",
        "lastMessageBlobB64": "U0hpTkVfRE0B...",
        "lastMessageTimeMs": 1774700000555,
        "unreadCount": 1,
        "hasDialog": true
      }
    ]
  }
}

Примечание

  • dialogs это серверный inbox-проекционный список диалогов;
  • relationFlag возвращается как close_friend, contact или none;
  • если один и тот же человек есть и в contact, и в close_friend, в dialogs он приходит как close_friend.
  • lastMessageBlobB64 содержит полный signed DM block последнего контентного сообщения в base64;
  • для чатов без сообщений поле lastMessageBlobB64 пустое.

3. GetUserConnectionsGraph

Запрос

{
  "op": "GetUserConnectionsGraph",
  "requestId": "graph-001",
  "payload": {
    "login": "alice"
  }
}

Успешный ответ

{
  "op": "GetUserConnectionsGraph",
  "requestId": "graph-001",
  "status": 200,
  "ok": true,
  "payload": {
    "login": "Alice",
    "outFriends": ["Bob"],
    "inFriends": ["Kate"],
    "outCloseFriends": [],
    "inCloseFriends": [],
    "outContacts": [],
    "inContacts": [],
    "outFollows": [],
    "inFollows": [],
    "outSpouses": [],
    "inSpouses": [],
    "outParents": [],
    "inParents": [],
    "outChildren": [],
    "inChildren": [],
    "outSiblings": [],
    "inSiblings": [],
    "outKnownPersons": [],
    "inKnownPersons": [],
    "outOfficialAccounts": [],
    "inOfficialAccounts": [],
    "outShineConfirmed": [],
    "inShineConfirmed": [],
    "outShineSeen": [],
    "inShineSeen": [],
    "parents": [],
    "children": [],
    "siblings": [],
    "spouses": [],
    "allUsers": [
      {
        "login": "Bob",
        "official": false,
        "shine": true,
        "officialLabel": "",
        "shineLabel": "shine",
        "avatar": { "ar": "..." }
      }
    ]
  }
}

Примечание

Поля known_person, shine_confirmed, shine_seen в UI считаются недопроверенной зоной проекта; при изменениях этой логики нужна ручная end-to-end проверка. outCloseFriends / inCloseFriends возвращают близких друзей, а outOfficialAccounts / inOfficialAccounts - подтверждённые официальные аккаунты.


4. AddCloseFriend

AddCloseFriend использует текущую авторизованную сессию как источник login.

Запрос

{
  "op": "AddCloseFriend",
  "requestId": "close-friend-001",
  "payload": {
    "toLogin": "bob"
  }
}

Успешный ответ

{
  "op": "AddCloseFriend",
  "requestId": "close-friend-001",
  "status": 200,
  "ok": true,
  "payload": {
    "login": "Alice",
    "toLogin": "Bob",
    "relation": "close_friend"
  }
}