Skip to content

Commit

Permalink
Fixes ordering bug described in issue #34
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonakemon committed May 21, 2023
1 parent cb43eb1 commit cb166d1
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions app/api/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,36 @@ def __init__(self, query_params=MultiDict[str, str]):
query_params.get("limit", default=self.DEFAULT_LIMIT, type=int)
)
self.offset = query_params.get("offset", default=0, type=int)
self.queryset = None
self.order: list = []

def _max_limit(self, limit: int):
if limit > self.MAX_LIMIT:
limit = self.MAX_LIMIT
return limit

def apply_ordering(self):
if len(self.order) == 0:
raise ValueError(
"You did not specify any attributes to order the queryset on."
)

for order in self.order:
self.queryset = self.queryset.order_by(order)
return self.queryset

def apply_pagination(self):
self.queryset = self.queryset.limit(self.limit)
self.queryset = self.queryset.offset(self.offset)
return self.queryset


class PersonService(BaseService):
def __init__(self, query_params=MultiDict[str, str]):
super().__init__(query_params)
self.query_params = query_params
self.queryset = Person.query.filter(Person.protected.isnot(True))
self.order = Person.last_name.asc()
self.order = [Person.last_name.asc(), Person.id.asc()]

def list_query(self, query_params):
q = query_params.get("q", None)
Expand All @@ -40,7 +57,7 @@ def list_query(self, query_params):
Person.removed_from_rechtspraak_at.is_(None)
)

self.queryset = self.queryset.order_by(self.order)
self.queryset = self.apply_ordering()
self.queryset = self.queryset.limit(self.limit)
self.queryset = self.queryset.offset(self.offset)
return self.queryset
Expand All @@ -57,10 +74,10 @@ def __init__(self, person: Person, query_params=MultiDict[str, str]):
.options(joinedload(Verdict.procedure_type))
.filter(PersonVerdict.person_id == person.id)
)
self.order = Verdict.issued.desc()
self.order = [Verdict.issued.desc(), Verdict.id.asc()]

def list_query(self):
self.queryset = self.queryset.order_by(self.order)
self.queryset = self.apply_ordering()
self.queryset = self.queryset.limit(self.limit)
self.queryset = self.queryset.offset(self.offset)
return self.queryset

0 comments on commit cb166d1

Please sign in to comment.