diff options
| -rw-r--r-- | backend/routes/forms/responses.py | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/backend/routes/forms/responses.py b/backend/routes/forms/responses.py new file mode 100644 index 0000000..ee8ab84 --- /dev/null +++ b/backend/routes/forms/responses.py @@ -0,0 +1,34 @@ +""" +Returns all form responses by form ID. +""" +from starlette.authentication import requires +from starlette.requests import Request +from starlette.responses import JSONResponse + +from backend.models import FormResponse +from backend.route import Route + + +class Responses(Route): +    """ +    Returns all form responses by form ID. +    """ + +    name = "form_responses" +    path = "/{form_id:str}/responses" + +    @requires(["authenticated", "admin"]) +    async def get(self, request: Request) -> JSONResponse: +        """Returns all form responses by form ID.""" +        if not await request.state.db.forms.find_one( +            {"_id": request.path_params["form_id"]} +        ): +            return JSONResponse({"error": "not_found"}, 404) + +        cursor = request.state.db.responses.find( +            {"form_id": request.path_params["form_id"]} +        ) +        responses = [ +            FormResponse(**response) for response in await cursor.to_list(None) +        ] +        return JSONResponse([response.dict() for response in responses]) | 
