derm-ai / app /routers /questionnaire.py
muhammadnoman76's picture
update
75e2b6c
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]
@router.post('/questionnaires', status_code=201)
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))
@router.get('/questionnaires')
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))
@router.put('/questionnaires/{questionnaire_id}')
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))
@router.delete('/questionnaires/{questionnaire_id}')
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))
@router.get('/check-answers')
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))
@router.get('/check-questionnaire')
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))