blob: 54da246efd7d9764073321ff0a2466c6563b5871 (
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
|
"""
Returns all form responses by form ID.
"""
from spectree import Response
from starlette.authentication import requires
from starlette.requests import Request
from starlette.responses import JSONResponse
from backend.models import FormResponse, ResponseList
from backend.route import Route
from backend.validation import api, ErrorMessage
class Responses(Route):
"""
Returns all form responses by form ID.
"""
name = "form_responses"
path = "/{form_id:str}/responses"
@requires(["authenticated", "admin"])
@api.validate(
resp=Response(HTTP_200=ResponseList, HTTP_404=ErrorMessage),
tags=["forms", "responses"]
)
async def get(self, request: Request) -> JSONResponse:
"""Returns all form responses by form ID."""
if not await request.state.db.forms.find_one(
{"_id": request.path_params["form_id"]}
):
return JSONResponse({"error": "not_found"}, 404)
cursor = request.state.db.responses.find(
{"form_id": request.path_params["form_id"]}
)
responses = [
FormResponse(**response) for response in await cursor.to_list(None)
]
return JSONResponse([response.dict() for response in responses])
|