diff options
author | 2020-12-24 09:29:10 +0200 | |
---|---|---|
committer | 2020-12-24 09:29:10 +0200 | |
commit | d41140f8d935f899c9e27ef6fc230895a3e81fdf (patch) | |
tree | 28becd28f412a51c24f18463b88906fe0f29525c /backend/routes/forms/responses.py | |
parent | Check does form exists in responses bulk DELETE (diff) |
Let Pydantic validate bulk responses delete data
Diffstat (limited to 'backend/routes/forms/responses.py')
-rw-r--r-- | backend/routes/forms/responses.py | 12 |
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. |