diff options
author | 2020-12-05 17:18:18 +0000 | |
---|---|---|
committer | 2020-12-05 17:18:18 +0000 | |
commit | e1a628bf579d74cbd6923ea42a91dd00ff5e4e05 (patch) | |
tree | 888b9b093f825cf8afc25f3494482b2ad61a1db2 /backend/routes/forms/new.py | |
parent | Create review-policy.yml (diff) | |
parent | Create route for creating new forms (diff) |
Merge pull request #13 from python-discord/ks123/forms-routes
Diffstat (limited to 'backend/routes/forms/new.py')
-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()) |