File size: 3,496 Bytes
75e2b6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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))