diff --git a/backend/app/main.py b/backend/app/main.py index a6a85a3..10f97ed 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -880,14 +880,40 @@ def create_answer( elif answer.status == "warning": points_earned = int(question.points * 0.5) - db_answer = models.Answer( - **answer.dict(), - points_earned=points_earned - ) - db.add(db_answer) - db.commit() - db.refresh(db_answer) - return db_answer + # Buscar si ya existe una respuesta para esta inspección y pregunta + existing_answer = db.query(models.Answer).filter( + models.Answer.inspection_id == answer.inspection_id, + models.Answer.question_id == answer.question_id + ).first() + if existing_answer: + # Actualizar la respuesta existente + # Si status es pass/fail, no poner valor por defecto en answer_value + if answer.status in ["pass", "fail"] and not answer.answer_value: + existing_answer.answer_value = None + else: + existing_answer.answer_value = answer.answer_value + existing_answer.status = answer.status + existing_answer.comment = getattr(answer, "comment", None) + existing_answer.ai_analysis = getattr(answer, "ai_analysis", None) + existing_answer.is_flagged = getattr(answer, "is_flagged", False) + existing_answer.points_earned = points_earned + existing_answer.updated_at = datetime.utcnow() + db.commit() + db.refresh(existing_answer) + return existing_answer + else: + # Si status es pass/fail y no hay valor, no poner valor por defecto en answer_value + answer_data = answer.dict() + if answer.status in ["pass", "fail"] and not answer.answer_value: + answer_data["answer_value"] = None + db_answer = models.Answer( + **answer_data, + points_earned=points_earned + ) + db.add(db_answer) + db.commit() + db.refresh(db_answer) + return db_answer @app.put("/api/answers/{answer_id}", response_model=schemas.Answer)