Newer
Older
from app.apis import admin_required, item_response, list_response
from app.core.dto import SlideDTO
from app.core.models import Competition, Slide
from app.core.parsers import slide_parser
from flask_jwt_extended import jwt_required
from flask_restx import Resource
schema = SlideDTO.schema
list_schema = SlideDTO.list_schema
def get_comp(CID):
return Competition.query.filter(Competition.id == CID).first()
@api.route("/")
@api.param("CID")
class SlidesList(Resource):
@jwt_required
def get(self, CID):
item_comp = get_comp(CID)
return list_response(list_schema.dump(item_comp.slides))
@jwt_required
def post(self, CID):
item_comp = get_comp(CID)
dbc.add.slide(item_comp)
dbc.refresh(item_comp)
return list_response(list_schema.dump(item_comp.slides))
@api.route("/<SID>")
@api.param("CID,SID")
class Slides(Resource):
@jwt_required
def get(self, CID, SID):
item_slide = dbc.get.slide(CID, SID)
return item_response(schema.dump(item_slide))
@jwt_required
def put(self, CID, SID):
args = slide_parser.parse_args(strict=True)
title = args.get("title")
timer = args.get("timer")
item_slide = dbc.get.slide(CID, SID)
item_slide = dbc.edit.slide(item_slide, title, timer)
return item_response(schema.dump(item_slide))
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
@jwt_required
def delete(self, CID, SID):
item_slide = dbc.get.slide(CID, SID)
dbc.delete.slide(item_slide)
return "deleted"
@api.route("/<SID>/order")
@api.param("CID,SID")
class SlidesOrder(Resource):
@jwt_required
def put(self, CID, SID):
args = slide_parser.parse_args(strict=True)
order = args.get("order")
item_slide = dbc.get.slide(CID, SID)
if order == item_slide.order:
api.abort(codes.BAD_REQUEST)
# clamp order between 0 and max
order_count = Slide.query.filter(Slide.competition_id == item_slide.competition_id).count()
if order < 0:
order = 0
elif order >= order_count - 1:
order = order_count - 1
# get slide at the requested order
item_slide_order = dbc.get.slide_by_order(CID, order)
# switch place between them
item_slide = dbc.edit.switch_order(item_slide, item_slide_order)
return item_response(schema.dump(item_slide))