Skip to content
Snippets Groups Projects
Commit 082a32fd authored by Victor Löfgren's avatar Victor Löfgren
Browse files

Add delete question api

parent a5622fe1
No related branches found
No related tags found
1 merge request!55Resolve "Add more api calls"
......@@ -52,6 +52,15 @@ class Questions(Resource):
return item_response(schema.dump(item_question))
@jwt_required
def delete(self, CID, QID):
item_question = dbc.get.question(CID, QID).first()
if not item_question:
return {"response": "No content found"}, codes.NOT_FOUND
dbc.delete.question(item_question)
return {}, codes.NO_CONTENT
@api.route("/search")
@api.param("CID")
......
......@@ -54,8 +54,11 @@ class Slides(Resource):
@jwt_required
def delete(self, CID, SID):
item_slide = dbc.get.slide(CID, SID)
if not item_slide:
return {"response": "No content found"}, codes.NOT_FOUND
dbc.delete.slide(item_slide)
return "deleted"
return {}, codes.NO_CONTENT
@api.route("/<SID>/order")
......
import app.core.controller as dbc
from app.core import db
from app.core.models import Blacklist, City, Competition, Role, Slide, User
......@@ -7,20 +8,48 @@ def default(item):
db.session.commit()
def slide(item):
default(item)
def slide(item_slide):
for item_question in item_slide.questions:
question(item_question)
deleted_slide_competition_id = item_slide.competition_id
deleted_slide_order = item_slide.order
default(item_slide)
def team(item):
default(item)
# Update slide order for all slides after the deleted slide
slides_in_same_competition, _ = dbc.get.search_slide(competition_id=deleted_slide_competition_id)
for other_slide in slides_in_same_competition:
if other_slide.order > deleted_slide_order:
other_slide.order -= 1
db.session.commit()
def team(item_team):
for item_question_answer in item_team.question_answers:
question_answers(item_question_answer)
default(item_team)
def question(item_question):
for item_question_answer in item_question.question_answers:
question_answers(item_question_answer)
for item_alternative in item_question.alternatives:
alternatives(item_alternative)
default(item_question)
def competition(item):
# Remove all slides from competition
for item_slide in item.slides:
def alternatives(item_alternatives):
default(item_alternatives)
def question_answers(item_question_answers):
default(item_question_answers)
def competition(item_competition):
for item_slide in item_competition.slides:
slide(item_slide)
# Remove all teams from competition
for item_team in item.teams:
for item_team in item_competition.teams:
team(item_team)
default(item)
default(item_competition)
......@@ -13,6 +13,13 @@ def team(CID, TID):
return Team.query.filter((Team.competition_id == CID) & (Team.id == TID)).first()
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))
def _search(query, order_column, page=0, page_size=15, order=1):
if order == 1:
query = query.order_by(order_column)
......@@ -43,6 +50,26 @@ def search_user(email=None, name=None, city_id=None, role_id=None, page=0, page_
return _search(query, order_column, page, page_size, order)
def search_slide(
slide_order=None, title=None, body=None, competition_id=None, page=0, page_size=15, order=1, order_by=None
):
query = Slide.query
if slide_order:
query = query.filter(Slide.order == slide_order)
if title:
query = query.filter(Slide.title.like(f"%{title}%"))
if body:
query = query.filter(Slide.body.like(f"%{body}%"))
if competition_id:
query = query.filter(Slide.competition_id == competition_id)
order_column = Slide.id # Default order_by
if order_by:
order_column = getattr(Slide.__table__.c, order_by)
return _search(query, order_column, page, page_size, order)
def search_questions(
name=None,
total_score=None,
......
OK = 200
NO_CONTENT = 204
BAD_REQUEST = 400
UNAUTHORIZED = 401
FORBIDDEN = 403
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment