Skip to content

Commit

Permalink
FWF-3679: [Feature] process list api changes
Browse files Browse the repository at this point in the history
  • Loading branch information
auslin-aot committed Oct 10, 2024
1 parent 677cfe4 commit a588435
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
get_role_ids_from_user_groups,
translate,
validate_sort_order_and_order_by,
add_sort_filter,
)
from .caching import Cache
from .sentry import init_sentry
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,4 @@ class ProcessSortingParameters: # pylint: disable=too-few-public-methods
Name = "name"
Created = "created"
Modified= "modified"
ProcessKey = "processKey"
17 changes: 17 additions & 0 deletions forms-flow-api-utils/src/formsflow_api_utils/utils/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
CREATE_SUBMISSIONS,
VIEW_SUBMISSIONS,
)
from sqlalchemy.sql.expression import text

def cors_preflight(methods: str = "GET"):
"""Render an option method on the class."""
Expand Down Expand Up @@ -70,6 +71,7 @@ def validate_sort_order_and_order_by(order_by: str, sort_order: str) -> bool:
ProcessSortingParameters.Name,
ProcessSortingParameters.Created,
ProcessSortingParameters.Modified,
ProcessSortingParameters.ProcessKey,
]:
order_by = None
else:
Expand Down Expand Up @@ -135,3 +137,18 @@ def get_form_and_submission_id_from_form_url(form_url: str) -> Tuple:
form_id = form_url[form_url.find("/form/") + 6 : form_url.find("/submission/")]
submission_id = form_url[form_url.find("/submission/") + 12 : len(form_url)]
return (form_id, submission_id)


def add_sort_filter(query, sort_by, sort_order, model_name):
"""Adding sortBy and sortOrder."""
order = []
if sort_by and sort_order:
for sort_by_att, sort_order_attr in zip(sort_by, sort_order):
name, value = validate_sort_order_and_order_by(
sort_order=sort_order_attr, order_by=sort_by_att
)
if name and value:
order.append(text(f"{model_name}.{name} {value}"))

query = query.order_by(*order)
return query
2 changes: 1 addition & 1 deletion forms-flow-api/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ ecdsa==0.18.0
flask-jwt-oidc==0.3.0
flask-marshmallow==1.2.1
flask-restx==1.3.0
formsflow_api_utils @ git+https://github.com/AOT-Technologies/forms-flow-ai.git@develop#subdirectory=forms-flow-api-utils
formsflow_api_utils @ git+https://github.com/shuhaib-aot/forms-flow-ai.git@feature/FWF-3679-subflow-creation-updation#subdirectory=forms-flow-api-utils
gunicorn==21.2.0
h11==0.14.0
h2==4.1.0
Expand Down
2 changes: 1 addition & 1 deletion forms-flow-api/requirements/prod.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ markupsafe
PyJWT
redis
lxml
git+https://github.com/AOT-Technologies/forms-flow-ai.git@develop#subdirectory=forms-flow-api-utils
git+https://github.com/shuhaib-aot/forms-flow-ai.git@feature/FWF-3679-subflow-creation-updation#subdirectory=forms-flow-api-utils
32 changes: 13 additions & 19 deletions forms-flow-api/src/formsflow_api/models/form_process_mapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,12 @@
DEFAULT_PROCESS_KEY,
DEFAULT_PROCESS_NAME,
FILTER_MAPS,
validate_sort_order_and_order_by,
add_sort_filter,
)
from formsflow_api_utils.utils.enums import FormProcessMapperStatus
from formsflow_api_utils.utils.user_context import UserContext, user_context
from sqlalchemy import UniqueConstraint, and_, desc, func, or_
from sqlalchemy.dialects.postgresql import JSON
from sqlalchemy.sql.expression import text

from .audit_mixin import AuditDateTimeMixin, AuditUserMixin
from .base_model import BaseModel
Expand Down Expand Up @@ -184,21 +183,6 @@ def get_latest_form_mapper_ids(cls):
.all()
)

@classmethod
def add_sort_filter(cls, query, sort_by, sort_order):
"""Adding sortBy and sortOrder."""
order = []
if sort_by and sort_order:
for sort_by_att, sort_order_attr in zip(sort_by, sort_order):
name, value = validate_sort_order_and_order_by(
sort_order=sort_order_attr, order_by=sort_by_att
)
if name and value:
order.append(text(f"form_process_mapper.{name} {value}"))

query = query.order_by(*order)
return query

@classmethod
def add_search_filter(cls, query, search):
"""Adding search filter in query."""
Expand Down Expand Up @@ -241,7 +225,12 @@ def find_all_forms(

query = cls.add_search_filter(query=query, search=search)

query = cls.add_sort_filter(query=query, sort_by=sort_by, sort_order=sort_order)
query = add_sort_filter(
query=query,
sort_by=sort_by,
sort_order=sort_order,
model_name="form_process_mapper",
)

# form type is list of type to filter the form
if form_type:
Expand Down Expand Up @@ -293,7 +282,12 @@ def find_all_active_by_formid(
)
query = cls.add_search_filter(query=query, search=search)
query = cls.access_filter(query=query)
query = cls.add_sort_filter(sort_by=sort_by, sort_order=sort_order, query=query)
query = cls.add_sort_filter(
sort_by=sort_by,
sort_order=sort_order,
query=query,
model_name="form_process_mapper",
)

total_count = query.count()
query = query.with_entities(
Expand Down
12 changes: 4 additions & 8 deletions forms-flow-api/src/formsflow_api/models/process.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,10 @@
from typing import List

from flask_sqlalchemy.query import Query
from formsflow_api_utils.utils import (
FILTER_MAPS,
validate_sort_order_and_order_by,
)
from formsflow_api_utils.utils import FILTER_MAPS, add_sort_filter
from formsflow_api_utils.utils.user_context import UserContext, user_context
from sqlalchemy import LargeBinary, and_, desc, or_
from sqlalchemy.dialects.postgresql import ENUM
from sqlalchemy.sql.expression import text

from .audit_mixin import AuditDateTimeMixin, AuditUserMixin
from .base_model import BaseModel
Expand Down Expand Up @@ -152,9 +148,9 @@ def find_all_process( # pylint: disable=too-many-arguments, too-many-positional
if is_subflow:
query = query.filter(cls.is_subflow.is_(True))
query = cls.auth_query(query=query)
sort_by, sort_order = validate_sort_order_and_order_by(sort_by, sort_order)
if sort_by and sort_order:
query = query.order_by(text(f"process.{sort_by} {sort_order}"))
query = add_sort_filter(
query=query, sort_by=sort_by, sort_order=sort_order, model_name="process"
)
total_count = query.count()
limit = total_count if limit is None else limit
query = query.paginate(page=page_no, per_page=limit, error_out=False)
Expand Down
6 changes: 4 additions & 2 deletions forms-flow-api/src/formsflow_api/services/process.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def get_all_process(cls, request_args): # pylint:disable=too-many-locals
dict_data = ProcessListRequestSchema().load(request_args) or {}
page_no = dict_data.get("page_no")
limit = dict_data.get("limit")
sort_by = dict_data.get("sort_by", "id")
sort_by = dict_data.get("sort_by", "")
process_id = dict_data.get("process_id")
process_name = dict_data.get("name")
status = dict_data.get("status").upper() if dict_data.get("status") else None
Expand All @@ -49,7 +49,9 @@ def get_all_process(cls, request_args): # pylint:disable=too-many-locals
created_to_date = dict_data.get("created_to_date")
modified_from_date = dict_data.get("modified_from_date")
modified_to_date = dict_data.get("modified_to_date")
sort_order = dict_data.get("sort_order", "desc")
sort_order = dict_data.get("sort_order", "")
sort_by = sort_by.split(",")
sort_order = sort_order.split(",")
process, count = Process.find_all_process(
created_from=created_from_date,
created_to=created_to_date,
Expand Down

0 comments on commit a588435

Please sign in to comment.