from performance.services.metrics_api.metrics_mapper import PERFORMANCE_FIELDS_MAPPINGS, START_DATE, END_DATE from performance.services.metrics_api.dimensions import Dimensions from performance.schemas import PerformanceMetricsParamsSchema from external_api.base.clients.delphi_client import AdsPerformanceQuery def parse_sorting(dimension, sort): sort_order = "asc" if sort.startswith("-"): sort_order = "desc" sort = sort[1:] if sort == START_DATE: sort_by = dimension.dimension_dates_path() + ".start_date" elif sort == END_DATE: sort_by = dimension.dimension_dates_path() + ".end_date" else: sort_by = "metrics." + PERFORMANCE_FIELDS_MAPPINGS.get(int(sort), "finance.spend") return sort_by, sort_order def build_performance_query( dimension: Dimensions, user_id: int, params: PerformanceMetricsParamsSchema ) -> AdsPerformanceQuery: sort_by, sort_order = parse_sorting(dimension, params.sort) query = AdsPerformanceQuery( start_date=params.startDate, end_date=params.endDate, group_by=[dimension.dimension_to_group_by()], user_id=user_id, decibel_label_id=params.labels, platform=params.platforms, sub_category_id=params.categories, is_assigned=True, is_pending=False, dsp=params.dsps, ) if params.provider: query.provider_id = params.provider query.sort_by = sort_by query.sort_order = sort_order return query