refactor code - update paginate_models function
This commit is contained in:
parent
5267e55925
commit
bb070977f9
@ -1,6 +1,6 @@
|
||||
from typing import TypedDict, Tuple
|
||||
|
||||
from flask import current_app
|
||||
from flask import current_app, abort
|
||||
from flask_sqlalchemy import BaseQuery
|
||||
from sqlalchemy import desc
|
||||
|
||||
@ -20,14 +20,9 @@ def order_by_column_name(query: BaseQuery, model_field: str, order_by_col_name:
|
||||
return query
|
||||
|
||||
|
||||
def paginate_models(page: str, query: BaseQuery, per_page = 10) -> PaginationResponse or Tuple[dict, int]:
|
||||
def paginate_models(page: int, query: BaseQuery, per_page=10) -> PaginationResponse:
|
||||
default_page = 1
|
||||
|
||||
if page is not None:
|
||||
try:
|
||||
page = int(page)
|
||||
except ValueError:
|
||||
return {"error": f"Invalid page! Page must be integer!"}, 400
|
||||
query = query.paginate(page=page, per_page=per_page, error_out=False)
|
||||
else:
|
||||
query = query.paginate(page=default_page, per_page=per_page, error_out=False)
|
||||
|
@ -22,12 +22,11 @@ def list_groups(query: dict) -> dict:
|
||||
|
||||
groups_query = Group.search_by_name(search_name)
|
||||
|
||||
response = paginate_models(page, groups_query, per_page)
|
||||
if (message := response.get('message')) is not None:
|
||||
abort(response['status_code'], message)
|
||||
data = paginate_models(page, groups_query, per_page)
|
||||
|
||||
return {
|
||||
"groups": response['items'],
|
||||
"max_pages": response['max_pages']
|
||||
"groups": data['items'],
|
||||
"max_pages": data['max_pages']
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,13 +25,11 @@ def list_project_supervisors(query: dict) -> dict:
|
||||
project_supervisor_query = ProjectSupervisor.search_by_fullname_and_mode_and_order_by_first_name_or_last_name(
|
||||
fullname, mode, order_by_first_name, order_by_last_name)
|
||||
|
||||
response = paginate_models(page, project_supervisor_query, per_page)
|
||||
if (message := response.get('message')) is not None:
|
||||
abort(response['status_code'], message)
|
||||
data = paginate_models(page, project_supervisor_query, per_page)
|
||||
# print(get_debug_queries()[0])
|
||||
return {
|
||||
"project_supervisors": response['items'],
|
||||
"max_pages": response['max_pages']
|
||||
"project_supervisors": data['items'],
|
||||
"max_pages": data['max_pages']
|
||||
}
|
||||
|
||||
|
||||
|
@ -33,13 +33,11 @@ def list_students(query: dict) -> dict:
|
||||
student_query = Student.search_by_fullname_and_mode_and_order_by_first_name_or_last_name(
|
||||
fullname, mode, order_by_first_name, order_by_last_name)
|
||||
|
||||
response = paginate_models(page, student_query, per_page)
|
||||
if (message := response.get('message')) is not None:
|
||||
abort(response['status_code'], message)
|
||||
data = paginate_models(page, student_query, per_page)
|
||||
# print(get_debug_queries()[0])
|
||||
return {
|
||||
"students": response['items'],
|
||||
"max_pages": response['max_pages']
|
||||
"students": data['items'],
|
||||
"max_pages": data['max_pages']
|
||||
}
|
||||
|
||||
|
||||
|
@ -24,16 +24,14 @@ def list_available_groups(query: dict) -> dict:
|
||||
ps_query = ps_query.filter(ProjectSupervisor.mode == mode)
|
||||
ps_query = ps_query.group_by(Group.id)
|
||||
|
||||
response = paginate_models(page, ps_query, per_page)
|
||||
if (message := response.get('message')) is not None:
|
||||
abort(response['status_code'], message)
|
||||
data = paginate_models(page, ps_query, per_page)
|
||||
|
||||
project_supervisors = []
|
||||
for project_supervisor, available_groups in response['items']:
|
||||
for project_supervisor, available_groups in data['items']:
|
||||
setattr(project_supervisor, 'available_groups', available_groups)
|
||||
project_supervisors.append(project_supervisor)
|
||||
|
||||
return {
|
||||
"project_supervisors": project_supervisors,
|
||||
"max_pages": response['max_pages']
|
||||
"max_pages": data['max_pages']
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user