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

Add get component list, get by id and add api

parent 393a76eb
No related branches found
No related tags found
2 merge requests!63Resolve "Add components",!62Resolve "Use data from database in editor"
This commit is part of merge request !62. Comments created here will be created in the context of that merge request.
import app.database.controller as dbc import app.database.controller as dbc
from app.apis import admin_required, item_response, list_response from app.apis import admin_required, item_response, list_response
from app.core.dto import ComponentDTO from app.core.dto import ComponentDTO
from app.core.parsers import competition_parser, competition_search_parser from app.core.parsers import component_parser
from app.database.models import Competition from app.database.models import Competition
from flask.globals import request from flask.globals import request
from flask_jwt_extended import jwt_required from flask_jwt_extended import jwt_required
...@@ -24,7 +24,14 @@ class ComponentByID(Resource): ...@@ -24,7 +24,14 @@ class ComponentByID(Resource):
@api.route("/") @api.route("/")
@api.param("CID, SID") @api.param("CID, SID")
class ComponentList(Resource): class ComponentList(Resource):
@jwt_required
def get(self, CID, SID):
items = dbc.get.component_list(SID)
return list_response(list_schema.dump(items))
@jwt_required @jwt_required
def post(self, CID, SID): def post(self, CID, SID):
item = dbc.add.component(**request.args) args = component_parser.parse_args()
item_slide = dbc.get.slide(CID, SID)
item = dbc.add.component(item_slide=item_slide, **args)
return item_response(schema.dump(item)) return item_response(schema.dump(item))
...@@ -68,3 +68,13 @@ team_parser.add_argument("name", type=str, location="json") ...@@ -68,3 +68,13 @@ team_parser.add_argument("name", type=str, location="json")
###SEARCH_COMPETITION#### ###SEARCH_COMPETITION####
media_parser_search = search_parser.copy() media_parser_search = search_parser.copy()
media_parser_search.add_argument("filename", type=str, default=None, location="args") media_parser_search.add_argument("filename", type=str, default=None, location="args")
###COMPONENT###
component_parser = reqparse.RequestParser()
component_parser.add_argument("x", type=str, default=None, location="json")
component_parser.add_argument("y", type=int, default=None, location="json")
component_parser.add_argument("w", type=int, default=None, location="json")
component_parser.add_argument("h", type=int, default=None, location="json")
component_parser.add_argument("data", type=dict, default=None, location="json")
component_parser.add_argument("type_id", type=int, default=None, location="json")
...@@ -124,6 +124,6 @@ class ComponentSchema(BaseSchema): ...@@ -124,6 +124,6 @@ class ComponentSchema(BaseSchema):
y = ma.auto_field() y = ma.auto_field()
w = ma.auto_field() w = ma.auto_field()
h = ma.auto_field() h = ma.auto_field()
data = ma.auto_field() # TODO: Convert this to dict, or save as dict to begin with
slide_id = ma.auto_field() slide_id = ma.auto_field()
text = ma.auto_field() type_id = ma.auto_field()
image_id = ma.auto_field()
...@@ -5,7 +5,6 @@ from app.database.models import ( ...@@ -5,7 +5,6 @@ from app.database.models import (
City, City,
Competition, Competition,
Component, Component,
ImageComponent,
Media, Media,
MediaType, MediaType,
Question, Question,
...@@ -13,7 +12,6 @@ from app.database.models import ( ...@@ -13,7 +12,6 @@ from app.database.models import (
Role, Role,
Slide, Slide,
Team, Team,
TextComponent,
User, User,
) )
from flask_restx import abort from flask_restx import abort
......
from app.database.models import Competition, Component, ImageComponent, Question, Slide, Team, TextComponent, User from app.database.models import Competition, Component, Question, Slide, Team, User
def user_exists(email): def user_exists(email):
return User.query.filter(User.email == email).count() > 0 return User.query.filter(User.email == email).count() > 0
def component(ID): def component(ID, required=True, error_msg=None):
return Component.query.filter(Component.id == ID) return Component.query.filter(Component.id == ID).first_extended(required, error_msg)
def competition(CID, required=True, error_msg=None): def competition(CID, required=True, error_msg=None):
...@@ -55,5 +55,10 @@ def slide_list(CID): ...@@ -55,5 +55,10 @@ def slide_list(CID):
return Slide.query.filter(Slide.competition_id == CID).all() return Slide.query.filter(Slide.competition_id == CID).all()
def component_list(SID):
# TODO: Maybe take CID as argument and make sure that SID is in that competition?
return Component.query.filter(Component.slide_id == SID).all()
def slide_count(CID): def slide_count(CID):
return Slide.query.filter(Slide.competition_id == CID).count() return Slide.query.filter(Slide.competition_id == CID).count()
...@@ -190,9 +190,8 @@ class Component(db.Model): ...@@ -190,9 +190,8 @@ class Component(db.Model):
y = db.Column(db.Integer, nullable=False, default=0) y = db.Column(db.Integer, nullable=False, default=0)
w = db.Column(db.Integer, nullable=False, default=1) w = db.Column(db.Integer, nullable=False, default=1)
h = db.Column(db.Integer, nullable=False, default=1) h = db.Column(db.Integer, nullable=False, default=1)
data = db.Column(db.Text) data = db.Column(db.Text) # TODO: Don't save this as text
type_id = db.Column(db.Integer, db.ForeignKey("component_type.id"), nullable=False) type_id = db.Column(db.Integer, db.ForeignKey("component_type.id"), nullable=False)
slide_id = db.Column(db.Integer, db.ForeignKey("slide.id"), nullable=False) slide_id = db.Column(db.Integer, db.ForeignKey("slide.id"), nullable=False)
def __init__(self, x, y, w, h, data, slide_id, type_id): def __init__(self, x, y, w, h, data, slide_id, type_id):
...@@ -200,7 +199,7 @@ class Component(db.Model): ...@@ -200,7 +199,7 @@ class Component(db.Model):
self.y = y self.y = y
self.w = w self.w = w
self.h = h self.h = h
self.data = data self.data = str(data)
self.slide_id = slide_id self.slide_id = slide_id
self.type_id = type_id self.type_id = type_id
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment