aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-12-13 16:12:44 +0200
committerGravatar ks129 <[email protected]>2020-12-13 16:12:44 +0200
commit642ba5b10a4436f213662d0ef1e8accbdd343fcd (patch)
treed112f8b57d856d18e1ea02c76f4c5d41ba0de4bb
parentMove form creation to forms root POST (diff)
Create route for fetching one form
-rw-r--r--backend/routes/forms/form.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/backend/routes/forms/form.py b/backend/routes/forms/form.py
new file mode 100644
index 0000000..599632e
--- /dev/null
+++ b/backend/routes/forms/form.py
@@ -0,0 +1,36 @@
+"""
+Returns single form information by ID.
+"""
+from starlette.requests import Request
+from starlette.responses import JSONResponse
+
+from backend.route import Route
+from backend.models import Form
+
+
+class SingleForm(Route):
+ """
+ Returns single form information by ID.
+
+ Returns all fields for admins, otherwise only public fields.
+ """
+
+ name = "form"
+ path = "/{form_id:str}"
+
+ async def get(self, request: Request) -> JSONResponse:
+ """Returns single form information by ID."""
+ admin = request.user.payload["admin"] if request.user.is_authenticated else False # noqa
+
+ filters = {
+ "_id": request.path_params["form_id"]
+ }
+
+ if not admin:
+ filters["features"] = "OPEN"
+
+ if raw_form := await request.state.db.forms.find_one(filters):
+ form = Form(**raw_form)
+ return JSONResponse(form.dict(admin=admin))
+
+ return JSONResponse({"error": "not_found"}, status_code=404)