diff options
author | 2020-12-13 16:12:44 +0200 | |
---|---|---|
committer | 2020-12-13 16:12:44 +0200 | |
commit | 642ba5b10a4436f213662d0ef1e8accbdd343fcd (patch) | |
tree | d112f8b57d856d18e1ea02c76f4c5d41ba0de4bb | |
parent | Move form creation to forms root POST (diff) |
Create route for fetching one form
-rw-r--r-- | backend/routes/forms/form.py | 36 |
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) |