Spaces:
Runtime error
Runtime error
Commit ·
d191365
1
Parent(s): bb4af63
added latest models
Browse files- app/routes/forms.py +27 -1
app/routes/forms.py
CHANGED
|
@@ -14,7 +14,7 @@ from datetime import datetime
|
|
| 14 |
|
| 15 |
from ..core.db import get_db
|
| 16 |
from ..core.security import get_current_user
|
| 17 |
-
from ..models import User, Form, FormQuestion, ConditionalRule, PublicForm, QuestionType, ConditionType
|
| 18 |
from ..schemas.form import (
|
| 19 |
FormCreate, FormUpdate, FormResponse, FormGenerationResponse,
|
| 20 |
QuestionCreate, QuestionUpdate, QuestionResponse,
|
|
@@ -239,9 +239,35 @@ async def delete_form(
|
|
| 239 |
detail="Form not found"
|
| 240 |
)
|
| 241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
db.delete(form)
|
| 243 |
db.commit()
|
| 244 |
|
|
|
|
|
|
|
| 245 |
return None
|
| 246 |
|
| 247 |
|
|
|
|
| 14 |
|
| 15 |
from ..core.db import get_db
|
| 16 |
from ..core.security import get_current_user
|
| 17 |
+
from ..models import User, Form, FormQuestion, ConditionalRule, PublicForm, QuestionType, ConditionType, FormResponse as FormResponseModel, ResponseAnswer, ChatMessage
|
| 18 |
from ..schemas.form import (
|
| 19 |
FormCreate, FormUpdate, FormResponse, FormGenerationResponse,
|
| 20 |
QuestionCreate, QuestionUpdate, QuestionResponse,
|
|
|
|
| 239 |
detail="Form not found"
|
| 240 |
)
|
| 241 |
|
| 242 |
+
# Delete all related records in order to respect foreign key constraints
|
| 243 |
+
# 1. Delete chat messages
|
| 244 |
+
db.query(ChatMessage).filter(ChatMessage.form_id == form_id).delete(synchronize_session=False)
|
| 245 |
+
|
| 246 |
+
# 2. Delete response answers (linked to responses)
|
| 247 |
+
response_ids = [r.id for r in db.query(FormResponseModel.id).filter(FormResponseModel.form_id == form_id).all()]
|
| 248 |
+
if response_ids:
|
| 249 |
+
db.query(ResponseAnswer).filter(ResponseAnswer.response_id.in_(response_ids)).delete(synchronize_session=False)
|
| 250 |
+
|
| 251 |
+
# 3. Delete form responses
|
| 252 |
+
db.query(FormResponseModel).filter(FormResponseModel.form_id == form_id).delete(synchronize_session=False)
|
| 253 |
+
|
| 254 |
+
# 4. Delete public forms (share links)
|
| 255 |
+
db.query(PublicForm).filter(PublicForm.form_id == form_id).delete(synchronize_session=False)
|
| 256 |
+
|
| 257 |
+
# 5. Delete conditional rules (linked to questions)
|
| 258 |
+
question_ids = [q.id for q in db.query(FormQuestion.id).filter(FormQuestion.form_id == form_id).all()]
|
| 259 |
+
if question_ids:
|
| 260 |
+
db.query(ConditionalRule).filter(ConditionalRule.question_id.in_(question_ids)).delete(synchronize_session=False)
|
| 261 |
+
|
| 262 |
+
# 6. Delete form questions
|
| 263 |
+
db.query(FormQuestion).filter(FormQuestion.form_id == form_id).delete(synchronize_session=False)
|
| 264 |
+
|
| 265 |
+
# 7. Finally delete the form
|
| 266 |
db.delete(form)
|
| 267 |
db.commit()
|
| 268 |
|
| 269 |
+
logger.info(f"Deleted form {form_id} and all associated data for user {current_user.id}")
|
| 270 |
+
|
| 271 |
return None
|
| 272 |
|
| 273 |
|