Темный режим

API Profile Workflow

1. Обзор workflow

API для управления профилями пользователей и компаний с авторизацией по токену.

Названиеapi-profile
База данныхPostgreSQL (managers, companies)
Хранилище файловS3 (Timeweb Cloud)
Методы7 webhook-узлов для разных операций

2. POST /profile/personal/get

Получение персональных данных менеджера по токену авторизации.

Цепочка выполнения:

  1. Webhook (profile/personal/get)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
  2. Edit Fields1

    Извлекает токен из заголовков:

    headers.authorization = $json.headers.authorization
  3. Postgres4

    Выполняет запрос к таблице managers:

    SELECT 
        "managerId", "email", "firstName", "middleName", 
        "lastName", "phone", "photoUrl", "companyId", "admin"
    FROM managers
    WHERE "token" = $1;

    Особенности:

    • Использует параметризованный запрос для безопасности
    • Возвращает все основные данные профиля
    • Токен заменяется через queryReplacement

  4. Respond to profile/personal/get

    Возвращает данные менеджера в формате JSON.

Пример ответа:

{
  "managerId": 55,
  "email": "dstan1111@gmail.com",
  "firstName": "Анатолий",
  "middleName": null,
  "lastName": "Бурцев",
  "phone": "79602308782",
  "photoUrl": null,
  "companyId": 53,
  "admin": false
}

3. POST /profile/personal/save

Обновление персональных данных менеджера.

Цепочка выполнения:

  1. Webhook (profile/personal/save)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
    • body.managerId - ID менеджера
    • body.firstName - имя
    • body.middleName - отчество
    • body.lastName - фамилия
    • body.phone - телефон
  2. Edit Fields2

    Извлекает параметры:

    token = $json.headers.authorization
    managerId = $json.body.managerId
    firstName = $json.body.firstName
    middleName = $json.body.middleName
    lastName = $json.body.lastName
    phone = $json.body.phone
  3. Postgres5

    Выполняет UPDATE запрос:

    UPDATE managers
    SET 
        "firstName" = $2,
        "middleName" = $4,
        "lastName" = $3,
        "phone" = $5
    WHERE "token" = $1;

    Параметры:

    • $1 - токен из заголовка
    • $2 - firstName
    • $3 - lastName
    • $4 - middleName
    • $5 - phone

  4. Respond to profile/personal/get1

    Возвращает обновленные данные менеджера.

Особенности:

  • Обновляются только переданные поля
  • middleName может быть null
  • Проверка прав через токен в WHERE условии

4. POST /profile/company/get

Получение данных компании по токену менеджера.

Цепочка выполнения:

  1. Webhook (profile/company/get)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
  2. Edit Fields

    Извлекает токен из заголовков:

    headers.authorization = $json.headers.authorization
  3. Postgres

    Выполняет запрос к таблице companies:

    SELECT 
        "companyId", "name", "accountType", "website"
    FROM companies
    WHERE "token" = $1;
  4. Respond to profile/company/get

    Возвращает данные компании в формате JSON.

Пример ответа:

{
  "companyId": 53,
  "name": "Example Company",
  "accountType": "premium",
  "website": "https://example.com"
}

5. POST /profile/company/save

Обновление данных компании.

Цепочка выполнения:

  1. Webhook (profile/company/save)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
    • body.companyId - ID компании
    • body.name - название компании
    • body.website - веб-сайт
    • body.billingInfo - платежная информация (объект)
  2. Edit Fields3

    Извлекает параметры:

    token = $json.headers.authorization
    companyId = $json.body.companyId
    name = $json.body.name
    website = $json.body.website
    billingInfo = $json.body.billingInfo
  3. Postgres6

    Выполняет UPDATE запрос:

    UPDATE companies
    SET 
        "name" = $2,
        "website" = $3
    WHERE "token" = $1;

    Параметры:

    • $1 - токен из заголовка
    • $2 - name
    • $3 - website

  4. Respond to profile/personal/get2

    Возвращает обновленные данные компании.

Особенности:

  • Обновляются только основные данные компании
  • billingInfo обрабатывается отдельным методом
  • Проверка прав через токен в WHERE условии

6. POST /profile/company/billing/get

Получение платежной информации компании.

Цепочка выполнения:

  1. Webhook (profile/company/billing/get)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
  2. Edit Fields5

    Извлекает токен из заголовков:

    token = $json.headers.authorization
  3. Postgres8

    Выполняет запрос к таблице companies:

    SELECT "companyId", "billing_info"
    FROM companies
    WHERE "token" = $1;
  4. If

    Проверяет наличие companyId:

    Условие: $json.companyId не пустое
  5. Respond to profile/company/billing/get

    Возвращает платежную информацию компании.

Пример ответа:

{
  "companyId": 53,
  "billing_info": {
    "legalAddress": "ул. Примерная, 123",
    "actualAddress": "ул. Примерная, 123",
    "kpp": "123456789",
    "inn": "123456789012",
    "ogrn": "123456789012345",
    "bankAccount": "40702810123450123456",
    "corrAccount": "30101810200000000593",
    "bik": "044525593",
    "bankName": "ПАО Сбербанк"
  }
}

7. POST /profile/company/billing/save

Обновление платежной информации компании.

Цепочка выполнения:

  1. Webhook (profile/company/billing/save)

    Принимает POST-запрос с параметрами:

    • headers.authorization - токен менеджера
    • body.billing_info - платежная информация (объект)
  2. Edit Fields6

    Извлекает параметры:

    token = $json.headers.authorization
    body.billing_info = $json.body.billing_info
  3. Postgres9

    Выполняет UPDATE запрос:

    UPDATE companies
    SET 
        "billing_info" = $2
    WHERE "token" = $1;

    Параметры:

    • $1 - токен из заголовка
    • $2 - billing_info (объект в JSON формате)

  4. Respond to profile/personal/get3

    Возвращает обновленные данные компании.

Особенности:

  • Полностью заменяет объект billing_info
  • Поддерживает сложные структуры данных в JSON
  • Проверка прав через токен в WHERE условии

8. POST /profile/file/upload

Загрузка аватара менеджера в S3 хранилище.

Цепочка выполнения:

  1. Webhook (profile/file/upload)

    Принимает POST-запрос с файлом в multipart/form-data:

    • headers.authorization - токен менеджера
    • file - файл изображения
  2. Параллельные ветки:

    Ветка 1: Загрузка в S3
    1. S32

      Загружает файл в S3 хранилище:

      Bucket: 91b8f4fa-91827ce1-dcc1-4e74-87bf-8264ca7c7368
      Папка: avatar
      Имя файла: оригинальное имя файла
    Ветка 2: Обновление URL в БД
    1. Edit Fields4

      Извлекает токен из заголовков:

      headers.authorization = $json.headers.authorization
    2. Postgres7

      Обновляет photoUrl в таблице managers:

      UPDATE managers
      SET "photoUrl" = 'https://s3.timeweb.cloud/.../avatar/' || $2
      WHERE "token" = $1;

      Где $2 - оригинальное имя файла

  3. Merge

    Объединяет результаты обеих веток.

  4. Respond to profile/file/upload

    Возвращает статус успешного выполнения:

    {
      "success": true
    }

Особенности:

  • Параллельная обработка файла и обновление БД
  • Файлы сохраняются в папку avatar S3 хранилища
  • URL формируется автоматически на основе имени файла

9. Общие компоненты

Авторизация

Все запросы требуют валидного токена менеджера в заголовке Authorization.

Проверка токена выполняется через WHERE условия в SQL запросах.

Структура БД

Таблица managers

  • managerId - первичный ключ
  • token - токен для авторизации
  • firstName, middleName, lastName - ФИО
  • email - электронная почта
  • phone - телефон
  • photoUrl - URL аватара
  • companyId - ссылка на компанию
  • admin - флаг администратора

Таблица companies

  • companyId - первичный ключ
  • token - токен компании
  • name - название компании
  • website - веб-сайт
  • accountType - тип аккаунта
  • billing_info - JSON с платежной информацией

Хранилище файлов

Используется S3 хранилище Timeweb Cloud:

  • Bucket: 91b8f4fa-91827ce1-dcc1-4e74-87bf-8264ca7c7368
  • Файлы аватаров сохраняются в папку avatar
  • URL формируется как: https://s3.timeweb.cloud/.../avatar/[filename]

Обработка ошибок

Общие сценарии ошибок:

  • Неверный токен - 401 Unauthorized
  • Отсутствуют обязательные поля - 400 Bad Request
  • Ошибка загрузки файла - 500 Internal Server Error
  • Ошибка соединения с БД - 503 Service Unavailable