From 04bcb98ae6c53acddc4c9cea8c12fe15fc269e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20L=C3=B6fgren?= <viclo211@student.liu.se> Date: Sat, 22 May 2021 00:22:10 +0200 Subject: [PATCH] Add answer api --- server/app/apis/__init__.py | 4 +-- server/app/apis/answers.py | 64 ++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/server/app/apis/__init__.py b/server/app/apis/__init__.py index 0ab7ce7d..945d9d7d 100644 --- a/server/app/apis/__init__.py +++ b/server/app/apis/__init__.py @@ -115,8 +115,6 @@ def protect_route(allowed_roles=None, allowed_views=None): # flask_api = Api() -# flask_api.add_namespace(answer_ns, path="/api/competitions/<competition_id>/teams/<team_id>/answers") - # flask_api.add_namespace(score_ns, path="/api/competitions/<competition_id>/teams/<team_id>/answers/question_scores") from flask_smorest import Api @@ -127,6 +125,7 @@ flask_api = Api() def init_api(): from .alternatives import blp as alternative_blp + from .answers import blp as answer_blp from .auth import blp as auth_blp from .codes import blp as code_blp from .competitions import blp as competition_blp @@ -149,3 +148,4 @@ def init_api(): flask_api.register_blueprint(code_blp) flask_api.register_blueprint(alternative_blp) flask_api.register_blueprint(component_blp) + flask_api.register_blueprint(answer_blp) diff --git a/server/app/apis/answers.py b/server/app/apis/answers.py index 190f7491..2bcbf159 100644 --- a/server/app/apis/answers.py +++ b/server/app/apis/answers.py @@ -4,57 +4,57 @@ Default route: /api/competitions/<competition_id>/teams/<team_id>/answers """ import app.database.controller as dbc -from app.apis import item_response, list_response, protect_route -from app.core.dto import QuestionAlternativeAnswerDTO, QuestionScoreDTO -from app.core.parsers import sentinel -from flask_restx import Resource, reqparse +from app.apis import protect_route +from app.core import ma +from app.core.schemas import BaseSchema, QuestionAlternativeAnswerSchema +from app.database import models +from flask.views import MethodView +from flask_smorest import Blueprint, abort, response -api = QuestionAlternativeAnswerDTO.api -schema = QuestionAlternativeAnswerDTO.schema -list_schema = QuestionAlternativeAnswerDTO.list_schema +from . import http_codes -score_schema = QuestionScoreDTO.schema -score_list_schema = QuestionScoreDTO.list_schema +blp = Blueprint( + "answer", + "answer", + url_prefix="/api/competitions/<competition_id>/teams/<team_id>/answers", + description="Adding, updating, deleting and copy answer", +) -answer_parser_add = reqparse.RequestParser() -answer_parser_add.add_argument("answer", type=str, required=True, location="json") +class AnswerAddArgsSchema(BaseSchema): + class Meta(BaseSchema.Meta): + model = models.QuestionAlternativeAnswer -answer_parser_edit = reqparse.RequestParser() -answer_parser_edit.add_argument("answer", type=str, default=sentinel, location="json") + answer = ma.auto_field(required=False) -@api.route("/question_alternatives") -@api.param("competition_id, team_id") -class QuestionAlternativeList(Resource): +@blp.route("") +class QuestionAlternativeList(MethodView): @protect_route(allowed_roles=["*"], allowed_views=["*"]) + @blp.response(http_codes.OK, QuestionAlternativeAnswerSchema) def get(self, competition_id, team_id): """ Gets all question answers that the specified team has given. """ + return dbc.get.question_alternative_answer_list(competition_id, team_id) - items = dbc.get.question_alternative_answer_list(competition_id, team_id) - return list_response(list_schema.dump(items)) - -@api.route("/question_alternatives/<question_alternative_id>") -@api.param("competition_id, team_id, question_alternative_id") -class QuestionAlternativeAnswers(Resource): +@blp.route("/<answer_id>") +class QuestionAlternativeAnswers(MethodView): @protect_route(allowed_roles=["*"], allowed_views=["*"]) - def get(self, competition_id, team_id, question_alternative_id): + @blp.response(http_codes.OK, QuestionAlternativeAnswerSchema) + def get(self, competition_id, team_id, answer_id): """ Gets the specified question answer. """ - - item = dbc.get.question_alternative_answer(competition_id, team_id, question_alternative_id) - return item_response(schema.dump(item)) + return dbc.get.question_alternative_answer(competition_id, team_id, answer_id) @protect_route(allowed_roles=["*"], allowed_views=["*"]) - def put(self, competition_id, team_id, question_alternative_id): + @blp.arguments(AnswerAddArgsSchema) + @blp.response(http_codes.OK, QuestionAlternativeAnswerSchema) + def put(self, args, competition_id, team_id, answer_id): """ Add or edit specified quesiton_answer. """ - item = dbc.get.question_alternative_answer(competition_id, team_id, question_alternative_id, required=False) + item = dbc.get.question_alternative_answer(competition_id, team_id, answer_id, required=False) if item is None: - args = answer_parser_add.parse_args(strict=True) - item = dbc.add.question_alternative_answer(args.get("answer"), question_alternative_id, team_id) + item = dbc.add.question_alternative_answer(args.get("answer"), answer_id, team_id) else: - args = answer_parser_edit.parse_args(strict=True) item = dbc.edit.default(item, **args) - return item_response(schema.dump(item)) + return item -- GitLab