diff --git a/server/app/apis/auth.py b/server/app/apis/auth.py index 920d2d65ea482e70a51c4547419656f97f157a31..2f525327acbed96e3bfb574df3c6991e80605fa4 100644 --- a/server/app/apis/auth.py +++ b/server/app/apis/auth.py @@ -32,11 +32,12 @@ class AuthSignup(Resource): password = args.get("password") role_id = args.get("role_id") city_id = args.get("city_id") + name = args.get("name") if User.query.filter(User.email == email).count() > 0: api.abort(codes.BAD_REQUEST, "User already exists") - item_user = dbc.add.default(User(email, password, role_id, city_id)) + item_user = dbc.add.default(User(email, password, role_id, city_id, name)) if not item_user: api.abort(codes.BAD_REQUEST, "User could not be created") diff --git a/server/app/core/controller/add.py b/server/app/core/controller/add.py index 14c5eecf04940b2daf1c6e563b09f617e68b3cf1..c693715e35c4aa579f1a86ddd9f3af137eeb6e4c 100644 --- a/server/app/core/controller/add.py +++ b/server/app/core/controller/add.py @@ -1,11 +1,20 @@ from app.core import db -from app.core.models import Blacklist, City, Competition, Role, Slide, User +from app.core.models import Blacklist, City, Competition, Question, Role, Slide, Team, User +def add_decorator(func): + def wrapper(*args, **kwargs): + item = func(*args, **kwargs) + db.session.add(item) + db.session.commit() + db.session.refresh(item) + return item + + return wrapper + + +@add_decorator def default(item): - db.session.add(item) - db.session.commit() - db.session.refresh(item) return item @@ -14,10 +23,27 @@ def blacklist(jti): db.session.commit() +@add_decorator def slide(item_competition): order = Slide.query.filter(Slide.competition_id == item_competition.id).count() - item = Slide(order, item_competition.id) - db.session.add(item) - db.session.commit() - db.session.refresh(item) - return item + return Slide(order, item_competition.id) + + +@add_decorator +def user(email, plaintext_password, item_role, item_city, name=None): + return User(email, plaintext_password, item_role.id, item_city.id, name) + + +@add_decorator +def question(name, order, item_type, item_slide): + return Question(name, order, item_type.id, item_slide.id) + + +@add_decorator +def competition(name, year, item_style, item_city): + return Competition(name, year, item_style.id, item_city.id) + + +@add_decorator +def team(name, item_competition): + return Team(name, item_competition.id) diff --git a/server/app/core/models.py b/server/app/core/models.py index 7800fbb818f851662a8f51cb490b04000b795ec5..5a4b344bc71f19d49a166fdc2cbff2a080c5a7e6 100644 --- a/server/app/core/models.py +++ b/server/app/core/models.py @@ -51,12 +51,13 @@ class User(db.Model): media = db.relationship("Media", backref="upload_by") - def __init__(self, email, plaintext_password, role_id, city_id): + def __init__(self, email, plaintext_password, role_id, city_id, name=None): self._password = bcrypt.generate_password_hash(plaintext_password) self.email = email self.role_id = role_id self.city_id = city_id self.authenticated = False + self.name = name @hybrid_property def password(self): diff --git a/server/populate.py b/server/populate.py index 01c3cb0d99bec49119f65e16faf9999a3f135a99..445ce993c8c489037cbda2bfb06414b9361e1f2d 100644 --- a/server/populate.py +++ b/server/populate.py @@ -10,60 +10,61 @@ def _add_items(): media_types = ["Image", "Video"] question_types = ["Boolean", "Multiple", "Text"] roles = ["Admin", "Editor"] - cities = ["Linköping", "Stockholm", "Norrkäping"] + cities = ["Linköping", "Stockholm", "Norrköping", "Örkelljunga"] teams = ["Gymnasieskola A", "Gymnasieskola B", "Gymnasieskola C"] - for item in media_types: - db.session.add(MediaType(item)) + for team_name in media_types: + db.session.add(MediaType(team_name)) db.session.commit() - for item in question_types: - db.session.add(QuestionType(item)) + for team_name in question_types: + db.session.add(QuestionType(team_name)) db.session.commit() - for item in roles: - db.session.add(Role(item)) + for team_name in roles: + db.session.add(Role(team_name)) db.session.commit() - for item in cities: - db.session.add(City(item)) + for team_name in cities: + db.session.add(City(team_name)) db.session.commit() - db.session.add(Style("Main Style", "")) - db.session.commit() + item_style1 = dbc.add.default(Style("Main Style", "")) - dbc.add.default(User("admin@test.se", "password", 2, 1)) - dbc.add.default(User("test@test.se", "password", 1, 1)) + item_admin = Role.query.filter(Role.name == "Admin").one() + item_editor = Role.query.filter(Role.name == "Editor").one() - # Add competitions to db - for i in range(3): - dbc.add.default(Competition(f"Test{i+1}", 1971, 1, 1)) + item_city = City.query.filter(City.name == "Linköping").one() - comps = Competition.query.all() - for comp in comps: + item_text = QuestionType.query.filter(QuestionType.name == "Text").one() - # Add slides to competitions - for _ in range(3): - dbc.add.slide(comp) + # Add users + dbc.add.user("admin@test.se", "password", item_admin, item_city) + dbc.add.user("test@test.se", "password", item_editor, item_city) + + # Add competitions to db + for i in range(3): + dbc.add.competition(f"Test{i+1}", 1971, item_style1, item_city) - # Add teams to competitions - for item in teams: - db.session.add(Team(item, comp.id)) - db.session.commit() + item_comps = Competition.query.all() + # Add + for item_comp in item_comps: + for i in range(1): + # Add slide to competition + item_slide = dbc.add.slide(item_comp) - # 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() + # Add question to competition + dbc.add.question(f"Q{i+1}", i + 1, item_text, item_slide) - team = Team.query.filter(Team.competition_id == 1).first() - print(team.name) + # Add teams to competition + for team_name in teams: + dbc.add.team(team_name, item_comp) -app = create_app("configmodule.DevelopmentConfig") +if __name__ == "__main__": + app = create_app("configmodule.DevelopmentConfig") -with app.app_context(): - db.drop_all() - db.create_all() - _add_items() + with app.app_context(): + db.drop_all() + db.create_all() + _add_items()