fix: prevent JSONB double-encoding on methodology save
Pass req.value directly to asyncpg instead of json.dumps(req.value). When a Python string was passed with ::jsonb, asyncpg encoded it as a JSONB string (not an array), causing the frontend spread operator to split it into individual characters — one textarea per character. Also fix typo in DISCUSSION_RULES default: "אסה" → "מאסה". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3095,11 +3095,14 @@ async def api_update_methodology(category: str, key: str, req: MethodologyUpdate
|
||||
raise HTTPException(422, "content_checklists value must be a non-empty string")
|
||||
|
||||
pool = await db.get_pool()
|
||||
# Pass req.value directly — asyncpg serializes Python list/dict to JSONB.
|
||||
# json.dumps() caused double-encoding: string passed to ::jsonb became a JSONB string,
|
||||
# not a JSONB array, making the frontend spread it as individual chars.
|
||||
await pool.execute(
|
||||
"INSERT INTO appeal_type_rules (id, appeal_type, rule_category, rule_key, rule_value) "
|
||||
"VALUES (gen_random_uuid(), '_global', $1, $2, $3::jsonb) "
|
||||
"ON CONFLICT (appeal_type, rule_category, rule_key) DO UPDATE SET rule_value = $3::jsonb",
|
||||
category, key, json.dumps(req.value, ensure_ascii=False),
|
||||
category, key, req.value,
|
||||
)
|
||||
|
||||
return {"key": key, "value": req.value, "is_override": True}
|
||||
|
||||
Reference in New Issue
Block a user