84 lines
2.9 KiB
Markdown
84 lines
2.9 KiB
Markdown
# demo-backend
|
||
|
||
Отдельный демо backend для travel pipeline из `openapi/travel.yaml`.
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
cd demo-backend
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
uvicorn app.main:app --reload --port 8010
|
||
```
|
||
|
||
## Запуск в Docker
|
||
|
||
```bash
|
||
cd demo-backend
|
||
docker network create shop-network 2>/dev/null || true
|
||
docker compose up -d --build
|
||
```
|
||
|
||
Остановка:
|
||
|
||
```bash
|
||
docker compose down
|
||
```
|
||
|
||
## Что реализовано
|
||
|
||
Travel линейный сценарий:
|
||
- `GET /users/recent` (`operationId: getRecentUsers`)
|
||
- `GET /hotels/top` (`operationId: getTopHotels`)
|
||
- `POST /segments/hotel` (`operationId: segmentUsersByHotelPreferences`)
|
||
- `POST /assignments/hotels` (`operationId: assignUsersToHotels`)
|
||
- `POST /emails/send-offers` (`operationId: sendHotelOffersByEmail`)
|
||
|
||
CRM линейный сценарий:
|
||
- `GET /crm/leads/recent` (`operationId: getRecentLeads`)
|
||
- `POST /crm/leads/qualify` (`operationId: qualifyLeadsForOffer`)
|
||
- `POST /crm/offers/prepare` (`operationId: prepareOffersForLeads`)
|
||
- `POST /crm/offers/send` (`operationId: sendPreparedOffers`)
|
||
|
||
Swagger UI: `http://localhost:8010/docs`
|
||
OpenAPI JSON: `http://localhost:8010/openapi.json`
|
||
|
||
Для генерации/запуска pipeline в основном backend импортируй именно
|
||
`demo-backend/openapi/travel.yaml`:
|
||
- `servers[0].url` = `http://demo-api:8010` (работает для backend-контейнера в `shop-network`)
|
||
- `servers[1].url` = `http://localhost:8010` (локальный запуск без Docker)
|
||
- у `template_id` задан `default`, чтобы one-click execution не требовал ручной ввод
|
||
|
||
Для CRM-сценария используй `demo-backend/openapi/crm_linear_pipeline.yaml`.
|
||
|
||
Если хочешь загрузить сразу все демо-ручки одним файлом:
|
||
`demo-backend/openapi/all_linear_scenarios.yaml`.
|
||
|
||
## Быстрая проверка пайплайна
|
||
|
||
```bash
|
||
BASE=http://localhost:8010
|
||
|
||
curl -s "$BASE/users/recent?limit=3" > /tmp/users.json
|
||
curl -s "$BASE/hotels/top?limit=2" > /tmp/hotels.json
|
||
|
||
jq -n \
|
||
--argjson users "$(jq '.users' /tmp/users.json)" \
|
||
--argjson hotels "$(jq '.hotels' /tmp/hotels.json)" \
|
||
'{users:$users, hotels:$hotels}' \
|
||
| curl -s -X POST "$BASE/segments/hotel" \
|
||
-H 'content-type: application/json' -d @- > /tmp/segments.json
|
||
|
||
jq -n --argjson segments "$(jq '.segments' /tmp/segments.json)" '{segments:$segments}' \
|
||
| curl -s -X POST "$BASE/assignments/hotels" \
|
||
-H 'content-type: application/json' -d @- > /tmp/assignments.json
|
||
|
||
jq -n \
|
||
--arg template_id "offer_template_2026" \
|
||
--argjson assignments "$(jq '.assignments' /tmp/assignments.json)" \
|
||
'{template_id:$template_id, assignments:$assignments}' \
|
||
| curl -s -X POST "$BASE/emails/send-offers" \
|
||
-H 'content-type: application/json' -d @-
|
||
```
|