diff options
Diffstat (limited to 'backend/routes')
| -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()) | 
