This commit is contained in:
2026-03-17 18:32:44 +03:00
commit efcd4a8dfd
209 changed files with 33355 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
# 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 @-
```