175 lines
3.1 KiB
Markdown
175 lines
3.1 KiB
Markdown
# API для разработчиков: связи пользователей
|
||
|
||
Документ описывает операции чтения и записи пользовательских связей.
|
||
|
||
Текущие операции:
|
||
|
||
- `GetFriendsLists`
|
||
- `ListContacts`
|
||
- `GetUserConnectionsGraph`
|
||
- `AddCloseFriend`
|
||
|
||
## 1. `GetFriendsLists`
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "GetFriendsLists",
|
||
"requestId": "friends-001",
|
||
"payload": {
|
||
"login": "alice"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "GetFriendsLists",
|
||
"requestId": "friends-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"login": "Alice",
|
||
"out_friends": ["Bob"],
|
||
"in_friends": ["Kate"]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. `ListContacts`
|
||
|
||
`ListContacts` использует текущую авторизованную сессию. В payload нет дополнительных полей.
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "ListContacts",
|
||
"requestId": "contacts-001",
|
||
"payload": {
|
||
}
|
||
}
|
||
```
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "ListContacts",
|
||
"requestId": "contacts-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"login": "Alice",
|
||
"contacts": ["Bob", "Kate"]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 3. `GetUserConnectionsGraph`
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "GetUserConnectionsGraph",
|
||
"requestId": "graph-001",
|
||
"payload": {
|
||
"login": "alice"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "GetUserConnectionsGraph",
|
||
"requestId": "graph-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"login": "Alice",
|
||
"outFriends": ["Bob"],
|
||
"inFriends": ["Kate"],
|
||
"outContacts": [],
|
||
"inContacts": [],
|
||
"outFollows": [],
|
||
"inFollows": [],
|
||
"outSpouses": [],
|
||
"inSpouses": [],
|
||
"outParents": [],
|
||
"inParents": [],
|
||
"outChildren": [],
|
||
"inChildren": [],
|
||
"outSiblings": [],
|
||
"inSiblings": [],
|
||
"outKnownPersons": [],
|
||
"inKnownPersons": [],
|
||
"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 проверка.
|
||
|
||
---
|
||
|
||
## 4. `AddCloseFriend`
|
||
|
||
`AddCloseFriend` использует текущую авторизованную сессию как источник `login`.
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "AddCloseFriend",
|
||
"requestId": "close-friend-001",
|
||
"payload": {
|
||
"toLogin": "bob"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "AddCloseFriend",
|
||
"requestId": "close-friend-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"login": "Alice",
|
||
"toLogin": "Bob",
|
||
"relation": "close_friend"
|
||
}
|
||
}
|
||
```
|