feat: Exclude approved forms from drafts list

Added filtering to exclude approved/confirmed forms from drafts list:
- Updated /drafts/list endpoint to filter out forms with status_code='approved' or is_confirmed=true
- Created SQL script for n8n to mark forms as approved after processing Redis channel data
- Forms marked as approved will no longer appear in drafts list

SQL script: SQL_MARK_FORM_APPROVED.sql
- Updates status_code to 'approved'
- Sets is_confirmed = true
- Uses claim_lookup CTE to find claim by id or payload->>'claim_id'

Files:
- backend/app/api/claims.py (updated drafts list queries)
- docs/SQL_MARK_FORM_APPROVED.sql (new SQL script for n8n)
This commit is contained in:
AI Assistant
2025-11-25 16:42:09 +03:00
parent 3d3f5995af
commit 2fb0921e4c
2 changed files with 47 additions and 0 deletions

View File

@@ -201,6 +201,8 @@ async def list_drafts(
c.updated_at c.updated_at
FROM clpr_claims c FROM clpr_claims c
WHERE c.unified_id = $1 WHERE c.unified_id = $1
AND (c.status_code != 'approved' OR c.status_code IS NULL)
AND (c.is_confirmed IS NULL OR c.is_confirmed = false)
ORDER BY c.updated_at DESC ORDER BY c.updated_at DESC
LIMIT 20 LIMIT 20
""" """
@@ -227,6 +229,8 @@ async def list_drafts(
AND ua.channel_user_id = $1 AND ua.channel_user_id = $1
LIMIT 1 LIMIT 1
) )
AND (c.status_code != 'approved' OR c.status_code IS NULL)
AND (c.is_confirmed IS NULL OR c.is_confirmed = false)
ORDER BY c.updated_at DESC ORDER BY c.updated_at DESC
LIMIT 20 LIMIT 20
""" """
@@ -246,6 +250,8 @@ async def list_drafts(
c.updated_at c.updated_at
FROM clpr_claims c FROM clpr_claims c
WHERE c.session_token = $1 WHERE c.session_token = $1
AND (c.status_code != 'approved' OR c.status_code IS NULL)
AND (c.is_confirmed IS NULL OR c.is_confirmed = false)
ORDER BY c.updated_at DESC ORDER BY c.updated_at DESC
LIMIT 20 LIMIT 20
""" """

View File

@@ -0,0 +1,41 @@
-- SQL скрипт для n8n: Отметка формы как подтвержденной после получения данных из Redis канала
-- Используется после обработки события из канала clientright:webform:approve
--
-- Параметры:
-- $1 = claim_id (UUID или текст)
--
-- Обновляет:
-- - status_code = 'approved' (отмечает форму как подтвержденную)
-- - is_confirmed = true (дополнительный флаг подтверждения)
-- - updated_at = now() (время обновления)
--
-- После этого запись больше не будет показываться в списке черновиков
WITH claim_lookup AS (
SELECT
c.id,
c.payload,
c.status_code,
c.is_confirmed
FROM clpr_claims c
WHERE c.id::text = $1::text
OR c.payload->>'claim_id' = $1::text
ORDER BY
CASE WHEN c.id::text = $1::text THEN 1 ELSE 2 END,
c.updated_at DESC
LIMIT 1
)
UPDATE clpr_claims c
SET
status_code = 'approved',
is_confirmed = true,
updated_at = now()
FROM claim_lookup cl
WHERE c.id = cl.id
RETURNING
c.id,
c.payload->>'claim_id' AS claim_id,
c.status_code,
c.is_confirmed,
c.updated_at;