diff --git a/apps/api/src/api/v1/incidents.py b/apps/api/src/api/v1/incidents.py index 6ed263ae..43d4bdae 100644 --- a/apps/api/src/api/v1/incidents.py +++ b/apps/api/src/api/v1/incidents.py @@ -354,38 +354,93 @@ async def debug_resolve_incident(incident_id: str) -> dict[str, Any]: DEBUG: 直接更新 Incident 狀態為 RESOLVED 用於測試 resolve_incident_after_approval 邏輯 """ - service = get_proposal_service() + from src.db.base import get_db_context + from src.db.models import IncidentRecord + from sqlalchemy import select + from datetime import datetime, timezone - # 先取得當前狀態 redis_client = get_redis() - before_status = None + error_msg = None + + # 1. 取得 Redis 當前狀態 + before_redis = None try: data = await redis_client.get(f"incident:{incident_id}") if data: incident = Incident.model_validate_json(data) - before_status = incident.status.value + before_redis = incident.status.value except Exception as e: - logger.warning("debug_resolve_get_failed", error=str(e)) + error_msg = f"Redis read error: {e}" - # 呼叫 resolve - result = await service.resolve_incident_after_approval( - incident_id=incident_id, - approval_id="debug-test", - ) + # 2. 取得 DB 當前狀態 + before_db = None + try: + async with get_db_context() as db: + stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id) + result = await db.execute(stmt) + record = result.scalar_one_or_none() + if record: + before_db = record.status + except Exception as e: + error_msg = f"DB read error: {e}" - # 取得更新後狀態 - after_status = None + # 3. 直接更新 Redis + redis_updated = False try: data = await redis_client.get(f"incident:{incident_id}") if data: incident = Incident.model_validate_json(data) - after_status = incident.status.value + incident.status = IncidentStatus.RESOLVED + incident.updated_at = datetime.now(timezone.utc) + await redis_client.set( + f"incident:{incident_id}", + incident.model_dump_json(), + ex=604800, + ) + redis_updated = True except Exception as e: - logger.warning("debug_resolve_get_after_failed", error=str(e)) + error_msg = f"Redis update error: {e}" + + # 4. 直接更新 DB + db_updated = False + try: + async with get_db_context() as db: + stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id) + result = await db.execute(stmt) + record = result.scalar_one_or_none() + if record: + record.status = "resolved" + record.updated_at = datetime.now(timezone.utc) + await db.commit() + db_updated = True + except Exception as e: + error_msg = f"DB update error: {e}" + + # 5. 驗證更新後狀態 + after_redis = None + try: + data = await redis_client.get(f"incident:{incident_id}") + if data: + incident = Incident.model_validate_json(data) + after_redis = incident.status.value + except Exception as e: + pass + + after_db = None + try: + async with get_db_context() as db: + stmt = select(IncidentRecord).where(IncidentRecord.incident_id == incident_id) + result = await db.execute(stmt) + record = result.scalar_one_or_none() + if record: + after_db = record.status + except Exception as e: + pass return { - "success": result, "incident_id": incident_id, - "before_status": before_status, - "after_status": after_status, + "before": {"redis": before_redis, "db": before_db}, + "after": {"redis": after_redis, "db": after_db}, + "updates": {"redis": redis_updated, "db": db_updated}, + "error": error_msg, }