# 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"
  }
}
```
