diff options
Diffstat (limited to '')
| -rw-r--r-- | backend/routes/forms/response.py | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/backend/routes/forms/response.py b/backend/routes/forms/response.py new file mode 100644 index 0000000..2208c70 --- /dev/null +++ b/backend/routes/forms/response.py @@ -0,0 +1,30 @@ +""" +Returns single from response by 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 Response(Route): +    """Get single form response by ID.""" + +    name = "response" +    path = "/{form_id:str}/responses/{response_id:str}" + +    @requires(["authenticated", "admin"]) +    async def get(self, request: Request) -> JSONResponse: +        """Returns single form response by ID.""" +        if raw_response := await request.state.db.responses.find_one( +            { +                "_id": request.path_params["response_id"], +                "form_id": request.path_params["form_id"] +            } +        ): +            response = FormResponse(**raw_response) +            return JSONResponse(response.dict()) +        else: +            return JSONResponse({"error": "not_found"}, status_code=404) | 
