aboutsummaryrefslogtreecommitdiffstats
path: root/backend/routes/forms/new.py
diff options
context:
space:
mode:
authorGravatar ks129 <[email protected]>2020-12-02 15:24:43 +0200
committerGravatar ks129 <[email protected]>2020-12-02 15:24:43 +0200
commitac1000cb101e69a44e69e3e7a4fbdeb595aa0e83 (patch)
treec14e3fb1fde284f3be71d9eedf2f5c63fad6b30e /backend/routes/forms/new.py
parentMove data to Form and then back to dictionary for id converting (diff)
Create route for creating new forms
Diffstat (limited to 'backend/routes/forms/new.py')
-rw-r--r--backend/routes/forms/new.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/backend/routes/forms/new.py b/backend/routes/forms/new.py
new file mode 100644
index 0000000..ff39f12
--- /dev/null
+++ b/backend/routes/forms/new.py
@@ -0,0 +1,30 @@
+"""
+Creates new form based on data provided.
+"""
+from pydantic import ValidationError
+from starlette.authentication import requires
+from starlette.requests import Request
+from starlette.responses import JSONResponse
+
+from backend.models import Form
+from backend.route import Route
+
+
+class FormCreate(Route):
+ """
+ Creates new form from JSON data.
+ """
+
+ name = "forms_create"
+ path = "/new"
+
+ @requires(["authenticated", "admin"])
+ async def post(self, request: Request) -> JSONResponse:
+ form_data = await request.json()
+ try:
+ form = Form(**form_data)
+ except ValidationError as e:
+ return JSONResponse(e.errors())
+
+ await request.state.db.forms.insert_one(form.dict(by_alias=True))
+ return JSONResponse(form.dict())