upload
This commit is contained in:
@@ -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 @-
|
||||
```
|
||||
Reference in New Issue
Block a user