From c7b39c39a94cb9dc9510a61593704f08b3f32ae0 Mon Sep 17 00:00:00 2001 From: robban64 <carl@schonfelder.se> Date: Wed, 19 May 2021 12:13:38 +0200 Subject: [PATCH] fix: component order in get competition --- server/app/core/rich_schemas.py | 1 + server/app/core/schemas.py | 1 + server/app/database/controller/get.py | 18 +++++++++--------- server/configmodule.py | 1 + 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/server/app/core/rich_schemas.py b/server/app/core/rich_schemas.py index 9696f68e..1b21e5b5 100644 --- a/server/app/core/rich_schemas.py +++ b/server/app/core/rich_schemas.py @@ -14,6 +14,7 @@ class RichSchema(ma.SQLAlchemySchema): strict = True load_instance = True include_relationships = True + ordered = False class QuestionSchemaRich(RichSchema): diff --git a/server/app/core/schemas.py b/server/app/core/schemas.py index 10c1dfc1..ae32121d 100644 --- a/server/app/core/schemas.py +++ b/server/app/core/schemas.py @@ -13,6 +13,7 @@ class BaseSchema(ma.SQLAlchemySchema): strict = True load_instance = False include_relationships = False + ordered = False class IdNameSchema(BaseSchema): diff --git a/server/app/database/controller/get.py b/server/app/database/controller/get.py index ac59cd23..2b85abed 100644 --- a/server/app/database/controller/get.py +++ b/server/app/database/controller/get.py @@ -19,7 +19,7 @@ from app.database.models import ( User, ) from sqlalchemy import func -from sqlalchemy.orm import joinedload +from sqlalchemy.orm import joinedload, subqueryload from sqlalchemy.orm.util import with_polymorphic @@ -311,15 +311,15 @@ def component_list(competition_id, slide_id): def competition(competition_id): """ Get Competition and all it's sub-entities. """ - os1 = joinedload(Competition.slides).joinedload(Slide.components) - os2 = joinedload(Competition.slides).joinedload(Slide.questions).joinedload(Question.alternatives) - ot = joinedload(Competition.teams).joinedload(Team.question_alternative_answers) - ot1 = joinedload(Competition.teams).joinedload(Team.question_scores) + join_component = joinedload(Competition.slides).subqueryload(Slide.components) + join_alternatives = joinedload(Competition.slides).joinedload(Slide.questions).joinedload(Question.alternatives) + join_question_alternative_answer = joinedload(Competition.teams).joinedload(Team.question_alternative_answers) + join_question_score = joinedload(Competition.teams).joinedload(Team.question_scores) return ( Competition.query.filter(Competition.id == competition_id) - .options(os1) - .options(os2) - .options(ot) - .options(ot1) + .options(join_component) + .options(join_alternatives) + .options(join_question_alternative_answer) + .options(join_question_score) .first() ) diff --git a/server/configmodule.py b/server/configmodule.py index e38c4e04..25978d37 100644 --- a/server/configmodule.py +++ b/server/configmodule.py @@ -19,6 +19,7 @@ class Config: SQLALCHEMY_ECHO = False USER_LOGIN_LOCKED_ATTEMPTS = 12 USER_LOGIN_LOCKED_EXPIRES = timedelta(hours=3) + JSON_SORT_KEYS = False class DevelopmentConfig(Config): -- GitLab