-
Notifications
You must be signed in to change notification settings - Fork 0
API
POST /api/v1/chat
Проксирует запросы к Google Gemini Pro.
Контроллер: App\Http\Controllers\Api\V1\ChatController
{
"message": "Привет, расскажи о строительных тендерах",
"history": [
{"role": "user", "text": "Что такое RFQ?"},
{"role": "bot", "text": "RFQ — это запрос цен..."}
]
}| Поле | Тип | Описание |
|---|---|---|
| message | string, required, max 2000 | Текст сообщения |
| history | array, optional | История диалога |
| history.*.role | string | 'user' или 'bot' |
| history.*.text | string | Текст сообщения |
{
"reply": "Тендеры в строительной отрасли — это..."
}{
"error": "Произошла ошибка при обработке запроса",
"details": "API key not configured"
}- Требует
.env:GEMINI_API_KEY - Используется пакет
google-gemini-php/client - Метод:
geminiPro()(модель Gemini Pro) - Маппинг ролей: user → Role::USER, bot → Role::MODEL
GET /search/quick?q={query}
AJAX-поиск для выпадающего списка в навигации.
Контроллер: App\Http\Controllers\SearchController@quick
| Параметр | Тип | Описание |
|---|---|---|
| q | string, min 2 chars | Поисковый запрос |
Плоский JSON-массив (НЕ обёрнут в {results: [...]}):
[
{
"type": "company",
"type_label": "Компания",
"id": 5,
"title": "СтройГрупп",
"subtitle": "ИНН: 1234567890",
"url": "/companies/stroygrupp"
},
{
"type": "rfq",
"type_label": "Запрос цен",
"id": 12,
"title": "Закупка бетона М400",
"subtitle": "К-260223-0001",
"url": "/rfqs/12"
}
]- Company: до 3
- Project: до 3
- RFQ: до 2
- Auction: до 2
- User: до 3
| type | type_label |
|---|---|
| company | Компания |
| project | Проект |
| rfq | Запрос цен |
| auction | Аукцион |
| user | Пользователь |
GET /auctions/{id}/state
Состояние торгов аукциона для real-time обновления.
Контроллер: App\Http\Controllers\AuctionController@getState
Middleware: auth
{
"current_price": 950000.00,
"status": "trading",
"last_bid_at": "2026-02-23T15:30:00.000000Z",
"time_remaining": 1200,
"bids": [
{
"anonymous_code": "AB42",
"company_name": null,
"price": 950000.00,
"created_at": "2026-02-23T15:30:00.000000Z"
}
]
}Примечание: company_name = null для участников (анонимность), имя компании видно только организатору.
GET /notifications/unread-count
{
"count": 5
}GET /notifications
Поддерживает JSON и HTML-ответ (по заголовку Accept).
POST /notifications/{id}/read
POST /notifications/read-all
| Маршрут | Описание |
|---|---|
| GET /auth/google/redirect | Редирект на Google OAuth |
| GET /auth/google/callback | Callback от Google |
| GET /auth/yandex/redirect | Редирект на Yandex OAuth |
| GET /auth/yandex/callback | Callback от Yandex |
Кастомный провайдер: app/Socialite/YandexProvider.php
Регистрация: AppServiceProvider@configureSocialite() через Socialite::extend('yandex', ...)
Scopes: login:email, login:info, login:avatar
API Endpoints Yandex:
- Auth:
https://oauth.yandex.ru/authorize - Token:
https://oauth.yandex.ru/token - User Info:
https://login.yandex.ru/info