aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-12-24 09:29:10 +0200
committerGravatar ks129 <[email protected]>2020-12-24 09:29:10 +0200
commitd41140f8d935f899c9e27ef6fc230895a3e81fdf (patch)
tree28becd28f412a51c24f18463b88906fe0f29525c
parentCheck does form exists in responses bulk DELETE (diff)
Let Pydantic validate bulk responses delete data
-rw-r--r--backend/routes/forms/responses.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/backend/routes/forms/responses.py b/backend/routes/forms/responses.py
index baab856..f3c4cd7 100644
--- a/backend/routes/forms/responses.py
+++ b/backend/routes/forms/responses.py
@@ -1,6 +1,7 @@
"""
Returns all form responses by form ID.
"""
+from pydantic import BaseModel
from spectree import Response
from starlette.authentication import requires
from starlette.requests import Request
@@ -11,6 +12,10 @@ from backend.route import Route
from backend.validation import api, ErrorMessage, OkayResponse
+class ResponseIdList(BaseModel):
+ ids: list[str]
+
+
class Responses(Route):
"""
Returns all form responses by form ID.
@@ -41,6 +46,7 @@ class Responses(Route):
@requires(["authenticated", "admin"])
@api.validate(
+ json=ResponseIdList,
resp=Response(
HTTP_200=OkayResponse,
HTTP_404=ErrorMessage,
@@ -56,12 +62,10 @@ class Responses(Route):
return JSONResponse({"error": "not_found"}, status_code=404)
data = await request.json()
-
- if "ids" not in data:
- return JSONResponse({"error": "ids_not_provided"}, status_code=400)
+ response_ids = ResponseIdList(**data)
# Convert IDs to set to remove duplicates
- ids = set(data["ids"])
+ ids = set(response_ids.ids)
cursor = request.state.db.responses.find(
{"_id": {"$in": list(ids)}} # Convert here back to list, may throw error.