API Profile Workflow
1. Обзор workflow
API для управления профилями пользователей и компаний с авторизацией по токену.
| Название | api-profile |
|---|---|
| База данных | PostgreSQL (managers, companies) |
| Хранилище файлов | S3 (Timeweb Cloud) |
| Методы | 7 webhook-узлов для разных операций |
2. POST /profile/personal/get
Получение персональных данных менеджера по токену авторизации.
Цепочка выполнения:
-
Webhook (profile/personal/get)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджера
-
Edit Fields1
Извлекает токен из заголовков:
headers.authorization = $json.headers.authorization -
Postgres4
Выполняет запрос к таблице managers:
SELECT "managerId", "email", "firstName", "middleName", "lastName", "phone", "photoUrl", "companyId", "admin" FROM managers WHERE "token" = $1;Особенности:
- Использует параметризованный запрос для безопасности
- Возвращает все основные данные профиля
- Токен заменяется через queryReplacement
-
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
Обновление персональных данных менеджера.
Цепочка выполнения:
-
Webhook (profile/personal/save)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджераbody.managerId- ID менеджераbody.firstName- имяbody.middleName- отчествоbody.lastName- фамилияbody.phone- телефон
-
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 -
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
-
Respond to profile/personal/get1
Возвращает обновленные данные менеджера.
Особенности:
- Обновляются только переданные поля
- middleName может быть null
- Проверка прав через токен в WHERE условии
4. POST /profile/company/get
Получение данных компании по токену менеджера.
Цепочка выполнения:
-
Webhook (profile/company/get)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджера
-
Edit Fields
Извлекает токен из заголовков:
headers.authorization = $json.headers.authorization -
Postgres
Выполняет запрос к таблице companies:
SELECT "companyId", "name", "accountType", "website" FROM companies WHERE "token" = $1; -
Respond to profile/company/get
Возвращает данные компании в формате JSON.
Пример ответа:
{
"companyId": 53,
"name": "Example Company",
"accountType": "premium",
"website": "https://example.com"
}
5. POST /profile/company/save
Обновление данных компании.
Цепочка выполнения:
-
Webhook (profile/company/save)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджераbody.companyId- ID компанииbody.name- название компанииbody.website- веб-сайтbody.billingInfo- платежная информация (объект)
-
Edit Fields3
Извлекает параметры:
token = $json.headers.authorization companyId = $json.body.companyId name = $json.body.name website = $json.body.website billingInfo = $json.body.billingInfo -
Postgres6
Выполняет UPDATE запрос:
UPDATE companies SET "name" = $2, "website" = $3 WHERE "token" = $1;Параметры:
- $1 - токен из заголовка
- $2 - name
- $3 - website
-
Respond to profile/personal/get2
Возвращает обновленные данные компании.
Особенности:
- Обновляются только основные данные компании
- billingInfo обрабатывается отдельным методом
- Проверка прав через токен в WHERE условии
6. POST /profile/company/billing/get
Получение платежной информации компании.
Цепочка выполнения:
-
Webhook (profile/company/billing/get)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджера
-
Edit Fields5
Извлекает токен из заголовков:
token = $json.headers.authorization -
Postgres8
Выполняет запрос к таблице companies:
SELECT "companyId", "billing_info" FROM companies WHERE "token" = $1; -
If
Проверяет наличие companyId:
Условие: $json.companyId не пустое -
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
Обновление платежной информации компании.
Цепочка выполнения:
-
Webhook (profile/company/billing/save)
Принимает POST-запрос с параметрами:
headers.authorization- токен менеджераbody.billing_info- платежная информация (объект)
-
Edit Fields6
Извлекает параметры:
token = $json.headers.authorization body.billing_info = $json.body.billing_info -
Postgres9
Выполняет UPDATE запрос:
UPDATE companies SET "billing_info" = $2 WHERE "token" = $1;Параметры:
- $1 - токен из заголовка
- $2 - billing_info (объект в JSON формате)
-
Respond to profile/personal/get3
Возвращает обновленные данные компании.
Особенности:
- Полностью заменяет объект billing_info
- Поддерживает сложные структуры данных в JSON
- Проверка прав через токен в WHERE условии
8. POST /profile/file/upload
Загрузка аватара менеджера в S3 хранилище.
Цепочка выполнения:
-
Webhook (profile/file/upload)
Принимает POST-запрос с файлом в multipart/form-data:
headers.authorization- токен менеджераfile- файл изображения
-
Параллельные ветки:
Ветка 1: Загрузка в S3
-
S32
Загружает файл в S3 хранилище:
Bucket: 91b8f4fa-91827ce1-dcc1-4e74-87bf-8264ca7c7368 Папка: avatar Имя файла: оригинальное имя файла
Ветка 2: Обновление URL в БД
-
Edit Fields4
Извлекает токен из заголовков:
headers.authorization = $json.headers.authorization -
Postgres7
Обновляет photoUrl в таблице managers:
UPDATE managers SET "photoUrl" = 'https://s3.timeweb.cloud/.../avatar/' || $2 WHERE "token" = $1;Где $2 - оригинальное имя файла
-
S32
-
Merge
Объединяет результаты обеих веток.
-
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