fix(workflow): Duplicate - JSON-encode JSONB fields
All checks were successful
Deploy Development / deploy (push) Successful in 52s
Build Test / pytest-backend (push) Successful in 4s
Build Test / lint-backend (push) Successful in 0s
Build Test / build-frontend (push) Successful in 15s

**Error:**
```
psycopg2.ProgrammingError: can't adapt type 'dict'
```

**Root Cause:**
- duplicate_prompt passed Python dicts directly to SQL INSERT
- JSONB fields from r2d() are already deserialized by psycopg2
- PostgreSQL expects JSON strings for JSONB columns

**Fix:**
- Added json.dumps() for all JSONB fields before INSERT:
  - stages, output_schema, question_augmentations, graph_data
- Same pattern as import function

Files changed:
- backend/routers/prompts.py: JSON-encode JSONB in duplicate_prompt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lars 2026-04-11 14:46:13 +02:00
parent ff8104a533
commit 10d24bbef7

View File

@ -364,6 +364,12 @@ def duplicate_prompt(prompt_id: str, session: dict=Depends(require_admin)):
new_display_name = f"{original.get('display_name') or original['name']} (Kopie)"
# Prepare JSONB fields (convert dict/list to JSON string if needed)
stages_json = json.dumps(original['stages']) if original.get('stages') else None
output_schema_json = json.dumps(original['output_schema']) if original.get('output_schema') else None
question_aug_json = json.dumps(original['question_augmentations']) if original.get('question_augmentations') else None
graph_data_json = json.dumps(original['graph_data']) if original.get('graph_data') else None
cur.execute(
"""INSERT INTO ai_prompts (
id, name, slug, display_name, description, template, category,
@ -379,9 +385,9 @@ def duplicate_prompt(prompt_id: str, session: dict=Depends(require_admin)):
(new_id, new_name, new_slug, new_display_name,
original.get('description'), original.get('template'),
original.get('category', 'ganzheitlich'),
original.get('type', 'pipeline'), original.get('stages'),
original.get('output_format', 'text'), original.get('output_schema'),
original.get('question_augmentations'), original.get('graph_data'),
original.get('type', 'pipeline'), stages_json,
original.get('output_format', 'text'), output_schema_json,
question_aug_json, graph_data_json,
original.get('active', True), original.get('sort_order', 0))
)