# Методы для работы с площадками погрузки-выгрузки

## Добавление или изменение площадки погрузки-выгрузки

Чтобы изменить существующую площадку погрузки-выгрузки, надо передать поле id с ее идентификатором.
Если id не передать, то будет создана новая площадка погрузки-выгрузки.
В ответ на запрос возвращается созданная или изменённая площадка погрузки-выгрузки.

<a id="post-gw-timeslots-api-v1-terminal"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/terminal' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "name": "Тестовая площадка",
  "gates_count": "3",
  "loading_type": "any",
  "warehouse": 24540,
  "schedule": [
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": "1"
    }
  ],
  "contacts": [
    {
      "name": "Имя менеджера склада",
      "phone": "+7 000 000-00-00",
      "country_phone_id": "0",
      "warehouse": 34824
    }
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/terminals.openapi.json)

**Описание полей запроса**
- `name` — Название площадки погрузки-выгрузки
- `gates_count` — Количество ворот
- `loading_type` — Тип загрузки
- `warehouse` — Идентификатор склада
- `schedule` — Расписание работы площадки погрузки-выгрузки
- `schedule[].time_from` — Время начала работы склада
- `schedule[].time_to` — Время окончания работы склада
- `schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `contacts` — Контактные данные ответственных лиц
- `contacts[].name` — Имя контактного лица
- `contacts[].phone` — Телефон контактного лица
- `contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "terminal": {
      "id": 35262,
      "gates": [],
      "schedule": [
        {
          "day_of_week": "1",
          "time_from": "00:00:00",
          "time_to": "23:59:00"
        }
      ],
      "contacts": [
        {
          "id": 35498,
          "name": "Имя менеджера склада",
          "phone": "+7 000 000-00-00",
          "country_phone_id": "0"
        }
      ],
      "name": "Тестовая площадка",
      "gates_count": 3,
      "loading_type": "any",
      "date_creation": "2023-07-04T08:09:18.676843+03:00",
      "date_modified": "2023-07-04T08:09:18.676871+03:00",
      "deleted": false,
      "is_test": true,
      "warehouse": 34824
    }
  }
}
```

**Описание полей ответа**
- `result.terminal.id` — Идентификатор площадки погрузки-выгрузки
- `result.terminal.gates` — Список ворот площадки погрузки-выгрузки
- `result.terminal.schedule` — Расписание работы площадки погрузки-выгрузки
- `result.terminal.schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `result.terminal.schedule[].time_from` — Время начала работы склада
- `result.terminal.schedule[].time_to` — Время окончания работы склада
- `result.terminal.contacts` — Контактные данные ответственных лиц
- `result.terminal.contacts[].id` — Идентификатор контакта во временных окнах
- `result.terminal.contacts[].name` — Имя контактного лица
- `result.terminal.contacts[].phone` — Телефон контактного лица
- `result.terminal.contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие
- `result.terminal.name` — Название площадки погрузки-выгрузки
- `result.terminal.gates_count` — Количество ворот
- `result.terminal.loading_type` — Тип загрузки
- `result.terminal.date_creation` — Дата создания площадки погрузки-выгрузки
- `result.terminal.date_modified` — Дата изменения площадки погрузки-выгрузки
- `result.terminal.deleted` — Флаг, указывающий существует ли площадка погрузки-выгрузки или была удалена
- `result.terminal.is_test` — Флаг, указывающий является ли площадка погрузки-выгрузки тестовой
- `result.terminal.warehouse` — Идентификатор склада

**Пример ответа (400)**

```json
{
  "error": "multiple_errors",
  "error_list": [
    {
      "error": "loading_type",
      "reason": "Значения test нет среди допустимых вариантов."
    },
    {
      "error": "warehouse",
      "reason": "Некорректный тип. Ожидалось значение первичного ключа, получен str."
    }
  ],
  "reason": "invalid"
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `error_list` — Список возникших ошибок
- `error_list[].error` — Текстовый код ошибки
- `error_list[].reason` — Человекочитаемый текст ошибки
- `reason` — Человекочитаемый текст ошибки


## Получение площадок погрузки-выгрузки

Возвращается список площадок погрузки и выгрузки пользователя.

<a id="get-gw-timeslots-api-v1-terminal"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/terminal' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/terminals.openapi.json)

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "count": 2,
    "terminals": [
      {
        "id": 35260,
        "gates": [],
        "schedule": [
          {
            "day_of_week": "1",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "2",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "3",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "4",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "5",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "6",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          },
          {
            "day_of_week": "7",
            "time_from": "00:00:00",
            "time_to": "23:59:00"
          }
        ],
        "contacts": [
          {
            "id": 35496,
            "name": "Имя менеджера склада",
            "phone": "+7 000 000-00-00",
            "country_phone_id": "0"
          }
        ],
        "name": "Площадка",
        "gates_count": 1,
        "loading_type": "any",
        "date_creation": "2023-07-04T07:45:11.954912+03:00",
        "date_modified": "2023-07-04T07:45:11.954929+03:00",
        "deleted": false,
        "is_test": false,
        "warehouse": 34824
      },
      {
        "id": 35259,
        "gates": [],
        "schedule": [],
        "contacts": [],
        "name": "Площадка",
        "gates_count": 1,
        "loading_type": "any",
        "date_creation": "2023-07-04T06:57:45.340826+03:00",
        "date_modified": "2023-07-04T07:34:58.968527+03:00",
        "deleted": true,
        "is_test": false,
        "warehouse": 34823
      }
    ]
  }
}
```

**Описание полей ответа**
- `result.terminals` — Список терминалов
- `result.terminals[].id` — Идентификатор площадки погрузки-выгрузки
- `result.terminals[].gates` — Список ворот площадки погрузки-выгрузки
- `result.terminals[].schedule` — Расписание работы площадки погрузки-выгрузки
- `result.terminals[].schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `result.terminals[].schedule[].time_from` — Время начала работы склада
- `result.terminals[].schedule[].time_to` — Время окончания работы склада
- `result.terminals[].contacts` — Контактные данные ответственных лиц
- `result.terminals[].contacts[].id` — Идентификатор контакта во временных окнах
- `result.terminals[].contacts[].name` — Имя контактного лица
- `result.terminals[].contacts[].phone` — Телефон контактного лица
- `result.terminals[].contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие
- `result.terminals[].name` — Название площадки погрузки-выгрузки
- `result.terminals[].gates_count` — Количество ворот
- `result.terminals[].loading_type` — Тип загрузки
- `result.terminals[].date_creation` — Дата создания площадки погрузки-выгрузки
- `result.terminals[].date_modified` — Дата изменения площадки погрузки-выгрузки
- `result.terminals[].deleted` — Флаг, указывающий существует ли площадка погрузки-выгрузки или была удалена
- `result.terminals[].is_test` — Флаг, указывающий является ли площадка погрузки-выгрузки тестовой
- `result.terminals[].warehouse` — Идентификатор склада


## Удаление площадок погрузки-выгрузки

<a id="delete-gw-timeslots-api-v1-terminal"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/terminal' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "terminal_ids": [
    35262
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/terminals.openapi.json)

**Описание полей запроса**
- `terminal_ids` — Список удаляемых площадок погрузки-выгрузки

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "200": [
      35262
    ],
    "400": [],
    "500": []
  }
}
```

**Описание полей ответа**
- `result.200` — Список идентификаторов удаленных площадок погрузки-выгрузки
- `result.400` — Список идентификаторов складов, при удалении которых возникли ошибки валидации
- `result.500` — Список идентификаторов складов, при удалении которых возникли ошибки сервера

**Пример ответа (400)**

```json
{
  "error": "bad request",
  "reason": "Необходимо передать список terminal_ids",
  "details": null
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемый текст ошибки

