Arslan1997 commited on
Commit
d191365
·
1 Parent(s): bb4af63

added latest models

Browse files
Files changed (1) hide show
  1. 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