diff --git a/server/app/core/models.py b/server/app/core/models.py index 55ea1b1cebf1dff0cf0ad94f1cf61b44e0b56e0a..7800fbb818f851662a8f51cb490b04000b795ec5 100644 --- a/server/app/core/models.py +++ b/server/app/core/models.py @@ -138,6 +138,7 @@ class Slide(db.Model): body = db.Column(db.Text, nullable=False, default="") timer = db.Column(db.Integer, nullable=False, default=0) settings = db.Column(db.Text, nullable=False, default="{}") # Json object + competition_id = db.Column(db.Integer, db.ForeignKey("competition.id"), nullable=False) questions = db.relationship("Question", backref="slide") @@ -152,8 +153,10 @@ class Question(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(STRING_SIZE), nullable=False) order = db.Column(db.Integer, nullable=False) + type_id = db.Column(db.Integer, db.ForeignKey("question_type.id"), nullable=False) slide_id = db.Column(db.Integer, db.ForeignKey("slide.id"), nullable=False) + question_answers = db.relationship("QuestionAnswer", backref="question") alternatives = db.relationship("QuestionAlternative", backref="question") @@ -170,6 +173,7 @@ class QuestionAlternative(db.Model): text = db.Column(db.String(STRING_SIZE), nullable=False) value = db.Column(db.Boolean, nullable=False) order = db.Column(db.Integer, nullable=False) + question_id = db.Column(db.Integer, db.ForeignKey("question.id"), nullable=False) def __init__(self, text, value, order, question_id): @@ -184,6 +188,7 @@ class QuestionAnswer(db.Model): id = db.Column(db.Integer, primary_key=True) data = db.Column(db.Text, nullable=False) score = db.Column(db.Integer, nullable=False, default=0) # 0: False, 1: True + question_id = db.Column(db.Integer, db.ForeignKey("question.id"), nullable=False) team_id = db.Column(db.Integer, db.ForeignKey("team.id"), nullable=False) diff --git a/server/configmodule.py b/server/configmodule.py index f7c2935fa6e2f11747f14b7dfcfc5e426b6de1b5..d042d594bf1dea8c81081c701d7b87d2ddc196c9 100644 --- a/server/configmodule.py +++ b/server/configmodule.py @@ -11,6 +11,7 @@ class Config: BUNDLE_ERRORS = True JWT_ACCESS_TOKEN_EXPIRES = timedelta(days=2) JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=30) + SQLALCHEMY_TRACK_MODIFICATIONS = False class DevelopmentConfig(Config): @@ -21,7 +22,6 @@ class DevelopmentConfig(Config): class TestingConfig(Config): TESTING = True SQLALCHEMY_DATABASE_URI = "sqlite:///test.db" - SQLALCHEMY_TRACK_MODIFICATIONS = False class ProductionConfig(Config): diff --git a/server/populate.py b/server/populate.py index 1910ae8f12b03d09f79440cbb9c63cdf83605d89..01c3cb0d99bec49119f65e16faf9999a3f135a99 100644 --- a/server/populate.py +++ b/server/populate.py @@ -1,49 +1,69 @@ +from sqlalchemy.sql.expression import true + import app.core.controller as dbc from app import create_app, db -from app.core.models import City, MediaType, QuestionType, Role, Style, User +from app.core.controller.delete import competition +from app.core.models import City, Competition, MediaType, Question, QuestionType, Role, Slide, Style, Team, User def _add_items(): media_types = ["Image", "Video"] question_types = ["Boolean", "Multiple", "Text"] roles = ["Admin", "Editor"] - cities = ["Linköping"] + cities = ["Linköping", "Stockholm", "Norrkäping"] + teams = ["Gymnasieskola A", "Gymnasieskola B", "Gymnasieskola C"] - # Add media types for item in media_types: db.session.add(MediaType(item)) - db.session.commit() - # Add question types for item in question_types: db.session.add(QuestionType(item)) db.session.commit() - # Add roles for item in roles: db.session.add(Role(item)) db.session.commit() - # Add cities for item in cities: db.session.add(City(item)) db.session.commit() - # Add deafult style db.session.add(Style("Main Style", "")) - - # Commit changes to db db.session.commit() - # Add user with role and city + dbc.add.default(User("admin@test.se", "password", 2, 1)) dbc.add.default(User("test@test.se", "password", 1, 1)) - db.session.flush() + # Add competitions to db + for i in range(3): + dbc.add.default(Competition(f"Test{i+1}", 1971, 1, 1)) + + comps = Competition.query.all() + for comp in comps: + + # Add slides to competitions + for _ in range(3): + dbc.add.slide(comp) + + # Add teams to competitions + for item in teams: + db.session.add(Team(item, comp.id)) + db.session.commit() + + # Adds questions + slides = Slide.query.filter(Slide.competition_id == comp.id).all() + for i, slide in enumerate(slides, start=1): + db.session.add(Question(f"Q{i}", i, 1, slide.id)) + db.session.commit() + + team = Team.query.filter(Team.competition_id == 1).first() + print(team.name) app = create_app("configmodule.DevelopmentConfig") with app.app_context(): + db.drop_all() db.create_all() _add_items()