Backend - the-tender-team/tender-parsing GitHub Wiki
📘 API Документация: Аутентификация и управление пользователями
/register
🔐 POST Описание
Регистрация нового пользователя.
Тело запроса (JSON)
{
"username": "string",
"password": "string"
}
Ответ
200 OK
{
"msg": "Регистрация успешна"
}
Ошибки
400
: Пользователь уже существует
/login
🔐 POST Описание
Авторизация пользователя по логину и паролю.
Тело запроса (JSON)
{
"username": "string",
"password": "string"
}
Ответ
200 OK
{
"msg": "Вход выполнен"
}
Ошибки
401
: Неверные данные
/login/form
🔐 POST Описание
Альтернативная форма логина (OAuth2-совместимая). Используется для авторизации через form-data
. Использовалась для работы со Swagger UI. Для фронта использовать только обычную ручку '/login'
x-www-form-urlencoded
)
Параметры запроса (username
: логинpassword
: пароль
Ответ
200 OK
{
"access_token": "jwt_token_string",
"token_type": "bearer"
}
/me
🙋 GET Описание
Получить информацию о текущем авторизованном пользователе.
Ответ
{
"username": "example_user",
"role": "user | admin | owner"
}
/change-password
🔁 POST Описание
Изменение пароля текущего пользователя.
Тело запроса
{
"old_password": "string",
"new_password": "string"
}
Ответ
{
"msg": "Пароль успешно изменён"
}
Ошибки
401
: Старый пароль неверен404
: Пользователь не найден
📘 API Документация: Парсинг, просмотр и анализ тендеров
/parse
🛠️ POST Описание
Запускает парсинг сайта госзакупок с заданными фильтрами. Только для admin
и owner
.
- Тело запроса:
{
"pageStart": 1,
"pageEnd": 5,
"priceFrom": 1000.0,
"priceTo": 50000.0,
"terminationGrounds": [1, 2, 3],
"sortBy": 1,
"sortAscending": true,
"searchString": "тестовый строковый критерий",
"contractDateFrom": "01.01.2025",
"contractDateTo": "01.02.2025",
"publishDateFrom": "01.01.2025",
"publishDateTo": "01.02.2025",
"updateDateFrom": "01.01.2025",
"updateDateTo": "01.02.2025",
"executionDateStart": "01.01.2025",
"executionDateEnd": "01.02.2025",
}
- Параметры:
-
pageStart, pageEnd (числа)
Диапазон страниц (включительно), по которым нужно собрать данные. По умолчанию выводится только первая страница. Максимум можно выводить 10 страниц. -
priceFrom, priceTo (числа)
Цена в рублях. Если не указано, поиск по цене не ограничивается. Вовзращает ValueError если priceFrom > priceTo. -
terminationGrounds (список)
Основания расторжения контракта. Допустимые значения:1
- Судебный акт,2
- Односторонний отказ заказчика от исполнения контракта в соответствии с гражданским законодательством,3
- Односторонний отказ поставщика (подрядчика, исполнителя) от исполнения контракта в соответствии с гражданским законодательством.
Если входящий список пуст, то используются все элементы. Если список превышает 3 элемента или имеет недопустимые элементы возвращается ValueError.
-
sortBy (число)
Тип сортировки. Числа соответствуют:1 →
UPDATE_DATE
(Дата обновления)2 →
PUBLISH_DATE
(Дата размещения)3 →
PRICE
(Цена)4 →
RELEVANCE
(Релевантность)Если число не входит в диапазон от 1 до 4(включительно), возвращается ValueError
-
sortAscending (булево)
true (сортировать по возрастанию) или false (по убыванию). По умолчанию false. -
searchString (строка)
Поисковая строка для фильтрации результатов. По умолчанию пустая строка - результаты не фильтруются. -
contractDateFrom, contractDateTo (даты в формате
DD-MM-YYYY
) Дата заключения контракта от и до. Если не указывать, даты не ограничиваются. Возвращает ValueError, если дата от позже даты до -
publishDateFrom, publishDateTo (даты в формате
DD-MM-YYYY
) Дата размещения контракта от и до. Если не указывать, даты не ограничиваются. Возвращает ValueError, если дата от позже даты до -
updateDateFrom, updateDateTo (даты в формате
DD-MM-YYYY
) Дата обновления контракта от и до. Если не указывать, даты не ограничиваются. Возвращает ValueError, если дата от позже даты до -
executionDateStart, executionDateEnd (даты в формате
DD-MM-YYYY
) Дата исполнения контракта от и до. Если не указывать, даты не ограничиваются. Возвращает ValueError, если дата от позже даты до
-
Ответ
{
"msg": "Сохранено 50 тендеров"
}
Ошибки
403
: Недостаточно прав502
: Ошибка загрузки страницы с zakupki.gov.ru
/tenders
📄 GET Описание
Получить актуальную таблицу тендеров для текущего пользователя.
admin
иowner
получают свою последнюю таблицуuser
— закреплённую таблицу, либо последнюю при первом входе
Ответ
[
{
"title": "...",
"link": "...",
"customer": "...",
"price": "...",
"contractNumber": "...",
"purchaseObjects": "...",
"contractDate": "...",
"executionDate": "...",
"publishDate": "...",
"updateDate": "...",
"parsedAt": "...",
"parsedBy": "admin_user"
},
...
]
/tenders/pull-latest
🔄 POST Описание
Для пользователя с ролью user
: вручную подтянуть самую последнюю таблицу, созданную любым админом.
Ответ
{
"msg": "Получена последняя таблица от admin_username"
}
Ошибки
404
: Нет таблиц в базе
/tenders/{tender_id}/analyze
🤖 POST Описание
Проанализировать конкретный тендер с помощью LLM (YandexGPT). Анализ сохраняется в БД и повторно не выполняется.
Параметры пути
tender_id
— ID тендера
Ответ
{
"analysis": "В результате анализа выявлены риски...",
"cached": false
}
Если анализ уже был сделан:
{
"analysis": "Ранее сохранённый результат анализа...",
"cached": true
}
Ошибки
404
: Тендер не найден500
: Ошибка вызова YandexGPT
📘 API Документация: Управление заявками на получение роли администратора
/admin-request
✉️ POST Описание
Подача заявки на получение роли администратора. Доступно только для пользователей с ролью user
.
Ответ
200 OK
{
"msg": "Заявка подана"
}
Ошибки
400
: Заявка уже подана и ожидает рассмотрения403
: Недостаточно прав (если роль неuser
)
/admin-request-status/{username}
🔍 GET Описание
Получить статус заявки на получение прав администратора для указанного пользователя.
Доступ разрешён только самому пользователю, который подавал заявку.
Параметры пути
username
— имя пользователя, чью заявку нужно проверить
Ответ
{
"status": "pending | approved | rejected",
"created_at": "2025-05-16T14:32:10.000Z"
}
Ошибки
403 Forbidden
— если пользователь пытается запросить статус чужой заявки
{
"detail": "Недостаточно прав"
}
404 Not Found
— если заявка для указанного пользователя не найдена
{
"detail": "Заявка не найдена"
}
/admin-requests
📄 GET Описание
Получить список всех заявок от пользователей. Доступно только владельцу (owner
).
Ответ
200 OK
: Массив объектов-заявок
[
{
"id": 1,
"username": "ivan123",
"status": "pending",
"created_at": "2025-05-16T13:00:00+00:00"
},
...
]
/admin-requests/approve/{username}
✅ POST Описание
Одобрить заявку от пользователя и выдать ему роль admin
. Доступно только владельцу (owner
).
Параметры пути
username
: имя пользователя, чью заявку нужно одобрить
Ответ
{
"msg": "Пользователь ivan123 теперь админ"
}
Ошибки
404
: Заявка или пользователь не найдены403
: Недостаточно прав
/admin-requests/reject/{username}
❌ POST Описание
Отклонить заявку пользователя и сбросить ему роль user
. Доступно только владельцу (owner
).
Параметры пути
username
: имя пользователя, чью заявку нужно отклонить
Ответ
{
"msg": "Заявка от пользователя ivan123 отклонена"
}
Ошибки
404
: Заявка или пользователь не найдены403
: Недостаточно прав