# Инструкция для n8n: Создание/поиск пользователя web_form
## Контекст
После создания контакта в CRM через `CreateWebContact`, нужно найти или создать пользователя в PostgreSQL и получить `unified_id` для связи с черновиками.
## Шаги в n8n workflow
### 1. После CreateWebContact
- Получен `contact_id` из CRM
- Есть `phone` из запроса
### 2. PostgreSQL Node: Find or Create User
**Настройки:**
- **Operation**: Execute Query
- **Query**: Использовать запрос из `SQL_FIND_OR_CREATE_USER_WEB_FORM.sql`
- **Parameters**:
-`$1` = `{{$json.phone}}` (или `{{$('CreateWebContact').item.json.phone}}`)
**Запрос:**
```sql
WITH existing AS (
SELECT u.id AS user_id, u.unified_id
FROM clpr_user_accounts ua
JOIN clpr_users u ON u.id = ua.user_id
WHERE ua.channel = 'web_form'
AND ua.channel_user_id = $1
LIMIT 1
),
create_user AS (
INSERT INTO clpr_users (unified_id, phone, created_at, updated_at)
SELECT
'usr_' || gen_random_uuid()::text,
$1,
now(),
now()
WHERE NOT EXISTS (SELECT 1 FROM existing)
RETURNING id AS user_id, unified_id
),
final_user AS (
SELECT * FROM existing
UNION ALL
SELECT * FROM create_user
),
update_unified AS (
UPDATE clpr_users
SET unified_id = COALESCE(
unified_id,
'usr_' || gen_random_uuid()::text
),
updated_at = now()
WHERE id = (SELECT user_id FROM final_user LIMIT 1)
AND unified_id IS NULL
RETURNING id AS user_id, unified_id
),
final_unified_id AS (
SELECT unified_id FROM update_unified
UNION ALL
SELECT unified_id FROM final_user
WHERE NOT EXISTS (SELECT 1 FROM update_unified)
LIMIT 1
),
create_account AS (
INSERT INTO clpr_user_accounts(user_id, channel, channel_user_id)
SELECT
(SELECT user_id FROM final_user LIMIT 1),
'web_form',
$1
ON CONFLICT (channel, channel_user_id) DO UPDATE
SET user_id = EXCLUDED.user_id
RETURNING user_id, channel, channel_user_id
)
SELECT
(SELECT unified_id FROM final_unified_id LIMIT 1) AS unified_id,
(SELECT user_id FROM final_user LIMIT 1) AS user_id;