From 84ed28704b0a6fe09c7c347d681a5440ccd0981c Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 14 Dec 2020 16:53:08 +0200 Subject: Create route for returning all form responses --- backend/routes/forms/responses.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 backend/routes/forms/responses.py diff --git a/backend/routes/forms/responses.py b/backend/routes/forms/responses.py new file mode 100644 index 0000000..271e8be --- /dev/null +++ b/backend/routes/forms/responses.py @@ -0,0 +1,30 @@ +""" +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.""" + cursor = request.state.db.responses.find( + {"form_id": request.path_params["form_id"]} + ) + if raw_responses := await cursor.to_list(None): + responses = [FormResponse(**response) for response in raw_responses] + return JSONResponse([response.dict() for response in responses]) + else: + return JSONResponse({"error": "not_found"}, 404) -- cgit v1.2.3 From 5229c73eeb00e62c2cddb8d3f3939c8a8802e450 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 14 Dec 2020 17:46:16 +0200 Subject: Improve form responses endpoint --- backend/routes/forms/responses.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/routes/forms/responses.py b/backend/routes/forms/responses.py index 271e8be..ee8ab84 100644 --- a/backend/routes/forms/responses.py +++ b/backend/routes/forms/responses.py @@ -20,11 +20,15 @@ class Responses(Route): @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"]} ) - if raw_responses := await cursor.to_list(None): - responses = [FormResponse(**response) for response in raw_responses] - return JSONResponse([response.dict() for response in responses]) - else: - return JSONResponse({"error": "not_found"}, 404) + responses = [ + FormResponse(**response) for response in await cursor.to_list(None) + ] + return JSONResponse([response.dict() for response in responses]) -- cgit v1.2.3