diff --git a/server/app/apis/questions.py b/server/app/apis/questions.py index d8e8b701c74715ded26b9d7050e4c9360b7c23be..a82b25eac53f3987dab4ded3586017368b00338f 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 bec6cb6a81005ebf782c212319b0641ca9f3a35a..ac2cc06f1ccb36f6c085ac774082e5eec25d42c9 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 63e67b3cead0f1a9b47cbc8ff58e5507bda314c5..0a1b190f83f2150972e932d9d3bc899c5fe3280a 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 1b31ddda5a84c2796d716bf3aac9db852c7ff303..f695deeea3b4c51b41aa2d639431a27cd59d3ab0 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 a3bf2ba088312f911de87755c7adf42e1d13f4dd..f053beb04aa8415343c5d55e047ed13d8873f8c2 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")