aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-12-16 08:40:48 +0200
committerGravatar ks129 <[email protected]>2020-12-16 08:40:48 +0200
commit79211eb48937e2290858768b986f2f307b988df2 (patch)
tree0bb393752ff597fa07ec45b4e9928497b29bb99f
parentMerge pull request #32 from python-discord/renovate/starlette-0.x (diff)
Add DELETE method for form endpoint
-rw-r--r--backend/routes/forms/form.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/backend/routes/forms/form.py b/backend/routes/forms/form.py
index 599632e..d64a08e 100644
--- a/backend/routes/forms/form.py
+++ b/backend/routes/forms/form.py
@@ -1,6 +1,7 @@
"""
-Returns single form information by ID.
+Returns or deletes single form information by ID.
"""
+from starlette.authentication import requires
from starlette.requests import Request
from starlette.responses import JSONResponse
@@ -10,7 +11,7 @@ from backend.models import Form
class SingleForm(Route):
"""
- Returns single form information by ID.
+ Returns or deletes single form information by ID.
Returns all fields for admins, otherwise only public fields.
"""
@@ -34,3 +35,20 @@ class SingleForm(Route):
return JSONResponse(form.dict(admin=admin))
return JSONResponse({"error": "not_found"}, status_code=404)
+
+ @requires(["authenticated", "admin"])
+ async def delete(self, request: Request) -> JSONResponse:
+ """Deletes form by ID."""
+ if not await request.state.db.forms.find_one(
+ {"_id": request.path_params["form_id"]}
+ ):
+ return JSONResponse({"error": "not_found"}, status_code=404)
+
+ await request.state.db.forms.delete_one(
+ {"_id": request.path_params["form_id"]}
+ )
+ await request.state.db.responses.delete_many(
+ {"form_id": request.path_params["form_id"]}
+ )
+
+ return JSONResponse(status_code=204)