blob: d1373e49ba791f896b3bec2b69f557ab8affd24f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
"""
Return a list of all forms to authenticated users.
"""
from spectree.response import Response
from starlette.authentication import requires
from starlette.requests import Request
from starlette.responses import JSONResponse
from backend.route import Route
from backend.models import Form, FormList
from backend.validation import ErrorMessage, OkayResponse, api
class FormsList(Route):
"""
List all available forms for administrator viewing.
"""
name = "forms_list_create"
path = "/"
@requires(["authenticated", "admin"])
@api.validate(resp=Response(HTTP_200=FormList), tags=["forms"])
async def get(self, request: Request) -> JSONResponse:
"""Return a list of all forms to authenticated users."""
forms = []
cursor = request.state.db.forms.find()
for form in await cursor.to_list(None):
forms.append(Form(**form)) # For converting _id to id
# Covert them back to dictionaries
forms = [form.dict() for form in forms]
return JSONResponse(
forms
)
@requires(["authenticated", "admin"])
@api.validate(
json=Form,
resp=Response(HTTP_200=OkayResponse, HTTP_400=ErrorMessage),
tags=["forms"]
)
async def post(self, request: Request) -> JSONResponse:
"""Create a new form."""
form_data = await request.json()
form = Form(**form_data)
if await request.state.db.forms.find_one({"_id": form.id}):
return JSONResponse({
"error": "id_taken"
}, status_code=400)
await request.state.db.forms.insert_one(form.dict(by_alias=True))
return JSONResponse(form.dict())
|