Spaces:
Running
Running
from fastapi import APIRouter, Depends, HTTPException | |
from pydantic import BaseModel | |
from typing import Dict, Any | |
from app.database.database_query import DatabaseQuery | |
from app.middleware.auth import get_current_user | |
router = APIRouter() | |
query = DatabaseQuery() | |
class QuestionnaireSubmission(BaseModel): | |
answers: Dict[str, Any] | |
async def submit_questionnaire( | |
submission: QuestionnaireSubmission, | |
username: str = Depends(get_current_user) | |
): | |
try: | |
if not submission.answers: | |
raise HTTPException(status_code=400, detail="Answers are required") | |
questionnaire_id = query.submit_questionnaire(username, submission.answers) | |
return { | |
'message': 'Questionnaire submitted successfully', | |
'questionnaire_id': questionnaire_id | |
} | |
except Exception as e: | |
if isinstance(e, HTTPException): | |
raise e | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def get_questionnaire(username: str = Depends(get_current_user)): | |
try: | |
questionnaire = query.get_latest_questionnaire(username) | |
if not questionnaire: | |
return {'message': 'No questionnaire found', 'data': None} | |
return {'message': 'Success', 'data': questionnaire} | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def update_questionnaire( | |
questionnaire_id: str, | |
submission: QuestionnaireSubmission, | |
username: str = Depends(get_current_user) | |
): | |
try: | |
if not submission.answers: | |
raise HTTPException(status_code=400, detail="Answers are required") | |
if query.update_questionnaire(questionnaire_id, username, submission.answers): | |
return {'message': 'Questionnaire updated successfully'} | |
raise HTTPException( | |
status_code=404, | |
detail='Questionnaire not found or unauthorized' | |
) | |
except Exception as e: | |
if isinstance(e, HTTPException): | |
raise e | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def delete_questionnaire( | |
questionnaire_id: str, | |
username: str = Depends(get_current_user) | |
): | |
try: | |
if query.delete_questionnaire(questionnaire_id, username): | |
return {'message': 'Questionnaire deleted successfully'} | |
raise HTTPException( | |
status_code=404, | |
detail='Questionnaire not found or unauthorized' | |
) | |
except Exception as e: | |
if isinstance(e, HTTPException): | |
raise e | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def check_answers(username: str = Depends(get_current_user)): | |
try: | |
answered_count = query.count_answered_questions(username) | |
return {'has_at_least_two_answers': answered_count >= 2} | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) | |
async def check_questionnaire_submission(username: str = Depends(get_current_user)): | |
try: | |
questionnaire = query.get_latest_questionnaire(username) | |
has_questionnaire = questionnaire is not None | |
return {'has_questionnaire': has_questionnaire} | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=str(e)) |