#!/usr/bin/env python3 """ Скрипт для исправления черновика bddb6815-8e17-4d54-a721-5e94382942c7 Добавляет documents_required и исправляет статус """ import asyncio import asyncpg import json from pathlib import Path # Параметры подключения к БД (из config.py) POSTGRES_HOST = "147.45.189.234" POSTGRES_PORT = 5432 POSTGRES_DB = "default_db" POSTGRES_USER = "gen_user" POSTGRES_PASSWORD = "2~~9_^kVsU?2\\S" CLAIM_ID = "bddb6815-8e17-4d54-a721-5e94382942c7" DOCUMENTS_REQUIRED = [ { "id": "contract", "name": "Договор или заказ", "hints": "Фото или скан подписанного договора или квитанции", "accept": ["pdf", "jpg", "png"], "priority": 1, "required": True }, { "id": "payment", "name": "Чек или подтверждение оплаты", "hints": "Копия кассового чека, онлайн-платежа или квитанции", "accept": ["pdf", "jpg", "png"], "priority": 1, "required": True }, { "id": "correspondence", "name": "Переписка", "hints": "Скриншоты сообщений, писем, жалоб", "accept": ["pdf", "jpg", "png"], "priority": 2, "required": False }, { "id": "evidence_photo", "name": "Фото доказательства", "hints": "Фото дефектов товара, видео процесса ремонта или передачи", "accept": ["jpg", "png", "pdf"], "priority": 2, "required": False } ] async def fix_draft(): """Исправляет черновик: добавляет documents_required и обновляет статус""" conn = await asyncpg.connect( host=POSTGRES_HOST, port=POSTGRES_PORT, database=POSTGRES_DB, user=POSTGRES_USER, password=POSTGRES_PASSWORD ) try: # Получаем текущее состояние черновика row = await conn.fetchrow(""" SELECT id, status_code, payload FROM clpr_claims WHERE id::text = $1 OR payload->>'claim_id' = $1 LIMIT 1 """, CLAIM_ID) if not row: print(f"❌ Черновик {CLAIM_ID} не найден!") return payload = row['payload'] if isinstance(row['payload'], dict) else json.loads(row['payload']) current_status = row['status_code'] documents_uploaded = payload.get('documents_uploaded', []) uploaded_count = len(documents_uploaded) if isinstance(documents_uploaded, list) else 0 print(f"📋 Текущее состояние черновика:") print(f" - status_code: {current_status}") print(f" - documents_required: {len(payload.get('documents_required', []))} шт.") print(f" - documents_uploaded: {uploaded_count} шт.") # Определяем новый статус if uploaded_count > 0: if uploaded_count >= len(DOCUMENTS_REQUIRED): new_status = 'draft_docs_complete' else: new_status = 'draft_docs_progress' else: new_status = 'draft_new' # Обновляем payload payload['documents_required'] = DOCUMENTS_REQUIRED # Обновляем черновик await conn.execute(""" UPDATE clpr_claims SET status_code = $1, payload = $2::jsonb, updated_at = now() WHERE id::text = $3 OR payload->>'claim_id' = $3 """, new_status, json.dumps(payload, ensure_ascii=False), CLAIM_ID) print(f"\n✅ Черновик исправлен!") print(f" - Новый status_code: {new_status}") print(f" - documents_required: {len(DOCUMENTS_REQUIRED)} документов добавлено") # Проверяем результат row_after = await conn.fetchrow(""" SELECT id::text, status_code, jsonb_array_length(COALESCE(payload->'documents_required', '[]'::jsonb)) as docs_count FROM clpr_claims WHERE id::text = $1 OR payload->>'claim_id' = $1 LIMIT 1 """, CLAIM_ID) print(f"\n📊 Результат:") print(f" - status_code: {row_after['status_code']}") print(f" - documents_required count: {row_after['docs_count']}") finally: await conn.close() if __name__ == "__main__": asyncio.run(fix_draft())