From b9fc56891cb17aa9c37685fa77668acfc942a885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20L=C3=B6fgren?= <victor.l0fgr3n@gmail.com> Date: Thu, 8 Apr 2021 17:14:08 +0200 Subject: [PATCH] Add team edit api --- server/app/apis/questions.py | 2 +- server/app/apis/teams.py | 30 ++++++++++++++++++++++-------- server/app/core/controller/edit.py | 11 +++++++++++ server/app/core/controller/get.py | 2 +- server/app/core/parsers.py | 5 +++++ 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/server/app/apis/questions.py b/server/app/apis/questions.py index d8e8b701..a82b25ea 100644 --- a/server/app/apis/questions.py +++ b/server/app/apis/questions.py @@ -54,7 +54,7 @@ class Questions(Resource): @jwt_required def delete(self, CID, QID): - item_question = dbc.get.question(CID, QID).first() + item_question = dbc.get.question(CID, QID) if not item_question: return {"response": "No content found"}, codes.NOT_FOUND diff --git a/server/app/apis/teams.py b/server/app/apis/teams.py index bec6cb6a..ac2cc06f 100644 --- a/server/app/apis/teams.py +++ b/server/app/apis/teams.py @@ -3,6 +3,7 @@ import app.core.http_codes as codes from app.apis import admin_required, item_response, list_response from app.core.dto import TeamDTO from app.core.models import Competition, Team +from app.core.parsers import team_parser from flask_jwt_extended import get_jwt_identity, jwt_required from flask_restx import Namespace, Resource, reqparse @@ -25,14 +26,10 @@ class TeamsList(Resource): @jwt_required def post(self, CID): - parser = reqparse.RequestParser() - parser.add_argument("name", type=str, location="json") - args = parser.parse_args(strict=True) - + args = team_parser.parse_args(strict=True) item_comp = get_comp(CID) - dbc.add.team(args["name"], item_comp) - dbc.refresh(item_comp) - return list_response(list_schema.dump(item_comp.teams)) + item_team = dbc.add.team(args["name"], item_comp) + return item_response(schema.dump(item_team)) @api.route("/<TID>") @@ -46,5 +43,22 @@ class Teams(Resource): @jwt_required def delete(self, CID, TID): item_team = dbc.get.team(CID, TID) + if not item_team: + api.abort(codes.NOT_FOUND, f"Could not find team with id {TID} in competition with id {CID}.") + dbc.delete.team(item_team) - return "deleted" + return {}, codes.NO_CONTENT + + @jwt_required + def put(self, CID, TID): + args = team_parser.parse_args(strict=True) + name = args.get("name") + competition_id = args.get("competition_id") + + item_team = dbc.get.team(CID, TID) + if not item_team: + api.abort(codes.NOT_FOUND, f"Could not find team with id {TID} in competition with id {CID}.") + + item_team = dbc.edit.team(item_team, name=name, competition_id=competition_id) + + return item_response(schema.dump(item_team)) diff --git a/server/app/core/controller/edit.py b/server/app/core/controller/edit.py index 63e67b3c..0a1b190f 100644 --- a/server/app/core/controller/edit.py +++ b/server/app/core/controller/edit.py @@ -31,6 +31,17 @@ def slide(item, title=None, timer=None): return item +def team(item_team, name=None, competition_id=None): + if name: + item_team.name = name + if competition_id: + item_team.competition_id = competition_id + + db.session.commit() + db.session.refresh(item_team) + return item_team + + def competition(item, name=None, year=None, city_id=None): if name: item.name = name diff --git a/server/app/core/controller/get.py b/server/app/core/controller/get.py index 1b31ddda..f695deee 100644 --- a/server/app/core/controller/get.py +++ b/server/app/core/controller/get.py @@ -17,7 +17,7 @@ def question(CID, QID): slide_ids = set( [x.id for x in Slide.query.filter(Slide.competition_id == CID).all()] ) # TODO: Filter using database instead of creating a set of slide_ids - return Question.query.filter(Question.slide_id.in_(slide_ids) & (Question.id == QID)) + return Question.query.filter(Question.slide_id.in_(slide_ids) & (Question.id == QID)).first() def _search(query, order_column, page=0, page_size=15, order=1): diff --git a/server/app/core/parsers.py b/server/app/core/parsers.py index a3bf2ba0..f053beb0 100644 --- a/server/app/core/parsers.py +++ b/server/app/core/parsers.py @@ -69,3 +69,8 @@ question_search_parser.add_argument("name", type=str, default=None, location="js question_search_parser.add_argument("slide_id", type=int, default=None, location="json") question_search_parser.add_argument("type_id", type=int, default=None, location="json") question_search_parser.add_argument("competition_id", type=int, default=None, location="json") + +###TEAM#### +team_parser = reqparse.RequestParser() +team_parser.add_argument("name", type=str, location="json") +team_parser.add_argument("competition_id", type=int, location="json") -- GitLab