aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-12-14 17:55:26 +0000
committerGravatar GitHub <[email protected]>2020-12-14 17:55:26 +0000
commitc453953521c3c2aa85f20118f03852da0d88f09c (patch)
tree0256f6c39d4797b2e90d9effee3c1033fb642bf2
parentMerge pull request #22 from python-discord/ks123/single-response-route (diff)
parentMerge branch 'main' into ks123/responses-route (diff)
Merge pull request #26 from python-discord/ks123/responses-route
-rw-r--r--backend/routes/forms/responses.py34
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])