diff options
author | 2020-12-16 08:40:48 +0200 | |
---|---|---|
committer | 2020-12-16 08:40:48 +0200 | |
commit | 79211eb48937e2290858768b986f2f307b988df2 (patch) | |
tree | 0bb393752ff597fa07ec45b4e9928497b29bb99f | |
parent | Merge pull request #32 from python-discord/renovate/starlette-0.x (diff) |
Add DELETE method for form endpoint
-rw-r--r-- | backend/routes/forms/form.py | 22 |
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) |