diff options
-rw-r--r-- | backend/routes/forms/new.py | 30 |
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()) |